Мне интересно, есть ли возможность установить работу, которая генерирует артефакты, чтобы она никогда не истекала, если фиксация с тегом, иначе она должна истечь. В настоящее время срок его действия истекает через 3 дня. Но я хочу что-то вроде того, что если фиксация выполняется с определенным tag
, и она запускает Job A
, который генерирует артефакты, тогда срок его действия никогда не должен истечь. Но тот же Job A
должен выполняться для других коммитов без тегов, и артефакты, сгенерированные для этого, должны истечь в течение глобально установленного времени.
Как настроить артефакты заданий с тегами на неограниченный срок действия Gitlab CI
Ответы (3)
См. GitLab 13.3 (август 2020 г.), это официально поддерживается
(в отличие от обходного пути с expire_in 5 years
!)
Настройте артефакт задания так, чтобы он никогда не истекал
Как разработчик, у вас есть возможность указать точную дату истечения срока действия артефакта задания, но есть сценарии, в которых вам может потребоваться сохранить артефакт навсегда.
Теперь вы можете установить бессрочный срок действия артефакта, установив значение
expire_in
наnever
в конфигурации ЭК.См. документацию и Проблема.
ОП уточняет:
У меня есть одно задание, которое запускается для каждой фиксации, и срок действия артефактов для этого задания истекает через три дня, но для того же задания, если есть фиксация с тегом, я хочу, чтобы артефакты сохранялись навсегда.
Примечание: GitLab 13.4 (сентябрь 2020 г.) добавляет интересную функцию:
Заблокируйте последний артефакт задания, чтобы предотвратить его удаление
GitLab теперь будет автоматически блокировать последний артефакт успешного задания и конвейера для любой активной ветки, MR или тега, чтобы предотвратить его удаление по истечении срока действия. Это упрощает установку более агрессивной политики истечения срока действия для очистки старых артефактов, помогает сократить потребление дискового пространства и гарантирует, что у вас всегда будет копия самого последнего артефакта из конвейера.
См. документацию и Проблема.
У вас может быть специальное задание для обработки сохраняемости артефактов, которое выполняется только для тега. Что-то типа:
persist-tag-artifacts:
# Use this job to specify artifacts that should never expire for tag pipelines.
stage: post-deploy
rules:
- if: '$CI_COMMIT_TAG != null'
script:
- echo "Persiting artifacts for tag pipelines"
artifacts:
# Specify artifacts from previous jobs to be persisted indefinitely
paths:
- myArtifactsPathFromJob1
- myArtifactsPathFromJob2
- ...
expire_in: never
Запустите это задание после последнего этапа создания артефактов конвейера. Все артефакты из заданий предыдущих этапов автоматически копируются в это задание. Если вы не хотите, чтобы копировались все артефакты, а только те, которые вы хотите сохранить, вы можете использовать ключевое слово dependencies
.
Было бы еще лучше, если бы у Gitlab был способ условно установить глобальное expire_in: never
Вы можете установить срок действия артефакта для каждого задания.
Таким образом, для задания, в котором используется конкретный тег, вы должны установить срок действия артефакта через какой-то длительный период времени.
job:
tags:
- your_tag
artifacts:
expire_in: 5 yr
tag
, я хочу, чтобы артефакты сохранялись навсегда.
- person deanavenger; 27.04.2020