Удалить artifacts from CI вручную

У меня есть частный репозиторий в gitlab.com это использует функцию CI. Некоторые задания CI создают файлы артефактов, которые хранятся. Я только что реализовал, что артефакты удаляются автоматически через один день, добавив это в конфигурацию CI:

expire_in: 1 day

это отлично работает-однако старые артефакты не будут удалены (как ожидалось). Поэтому мой вопрос:

Как удалить старые артефакты или артефакты, срок действия которых не истек? (on gitlab.com, нет прямого доступа к сервер)

2 ответов


можно использовать GitLab REST API для удаления артефактов из заданий, если у вас нет прямого доступа к серверу. Вот пример сценария curl который использует 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

Я не GItlab 8.17 и могу удалить артефакты для конкретного задания, перейдя в каталог хранения на самом сервере, путь по умолчанию:

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

удаление всей папки для задания или просто содержимого, исчезает вид артефакта с страницы GitLab pipline

путь к хранилищу можно изменить, как описано в docs: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/administration/job_artifacts.md#storing-job-artifacts