2017-02-28 41 views
6

Mam prywatne repozytorium na gitlab.com, które używa funkcji CI. Niektóre zadania CI tworzą pliki artefaktów, które są przechowywane. Właśnie realizowany że artefakty są usuwane automatycznie po jednym dniu, dodając to do konfiguracji CI:Usuwanie artefaktów z CI ręcznie

expire_in: 1 day 

że działa świetnie - jednak stare artefakty nie zostaną usunięte (zgodnie z oczekiwaniami). Moje pytanie brzmi:

Jak mogę usunąć stare artefakty lub artefakty, które nie wygasają? (Na gitlab.com, brak bezpośredniego dostępu do serwera)

Odpowiedz

4

nie jestem GItlab 8,17 i są w stanie usunąć artefakty dla określonej pracy, przechodząc do katalogu pamięci na samym serwerze, domyślna ścieżka to:

/var/opt/gitlab/gitlab-rails/shared/artifacts/<year_month>/<project_id?>/<jobid> 

Usuwanie zarówno cały folder do pracy lub po prostu treści, znika artefakt widok od strony PipLine GitLab

ścieżka przechowywania można zmienić w sposób opisany w docs: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/administration/job_artifacts.md#storing-job-artifacts

+0

Niestety, nie mają bezpośredniego dostępu do serwera jako repozytorium znajduje się na serwerze gitlab.com. Zaktualizowałem moje pytanie, aby bardziej szczegółowo je omówić. – user1251007

+0

Zgodnie z GitLab, będziesz chciał usunąć przez konsolę gitlab-rails, jeśli masz dostęp do samego serwera GitLab. W przeciwnym razie możesz zobaczyć niezgodności, patrząc na rozmiar projektu w interfejsie administratora, ponieważ bazowa baza danych nie jest aktualizowana. Ref: https://gitlab.com/gitlab-org/gitlab-ce/issues/5572#note_3359570 –

0

można użyć GitLab REST API, aby usunąć artefakty z zadań, jeśli nie masz bezpośredniego dostępu do serwera. Oto sample curl script który korzysta z API:

#!/bin/bash 

# project_id, find it here: https://gitlab.com/[organization name]/[repository name]/edit inside the "General project settings" tab 
project_id="3034900" 

# token, find it here: https://gitlab.com/profile/personal_access_tokens 
token="Lifg_azxDyRp8eyNFRfg" 
server="gitlab.com" 

# go to https://gitlab.com/[organization name]/[repository name]/-/jobs 
# then open JavaScript console 
# copy/paste => copy(_.uniq($('.ci-status').map((x, e) => /([0-9]+)/.exec(e.href)).toArray()).join(' ')) 
# press enter, and then copy the result here : 
# repeat for every page you want 
job_ids=(48875658 48874137 48873496 48872419) 

for job_id in ${job_ids[@]}; 
do 
URL="https://$server/api/v4/projects/$project_id/jobs/$job_id/erase" 
echo "$URL" 
curl --request POST --header "PRIVATE-TOKEN:${token}" "$URL" 
echo "\n" 
done 
+0

Dziękuję za odpowiedź. Proszę jednak podać wszystkie niezbędne informacje w swojej odpowiedzi i zachować link w celach informacyjnych. Jak jest napisane, jest to raczej komentarz niż odpowiedź. Korzystanie z interfejsu API Rest wygląda obiecująco! – user1251007