Как настроить артефакты заданий с тегами на неограниченный срок действия Gitlab CI

Мне интересно, есть ли возможность установить работу, которая генерирует артефакты, чтобы она никогда не истекала, если фиксация с тегом, иначе она должна истечь. В настоящее время срок его действия истекает через 3 дня. Но я хочу что-то вроде того, что если фиксация выполняется с определенным tag, и она запускает Job A, который генерирует артефакты, тогда срок его действия никогда не должен истечь. Но тот же Job A должен выполняться для других коммитов без тегов, и артефакты, сгенерированные для этого, должны истечь в течение глобально установленного времени.


person deanavenger    schedule 26.04.2020    source источник


Ответы (3)


См. GitLab 13.3 (август 2020 г.), это официально поддерживается
(в отличие от обходного пути с expire_in 5 years!)

Настройте артефакт задания так, чтобы он никогда не истекал

Как разработчик, у вас есть возможность указать точную дату истечения срока действия артефакта задания, но есть сценарии, в которых вам может потребоваться сохранить артефакт навсегда.

Теперь вы можете установить бессрочный срок действия артефакта, установив значение expire_in на never в конфигурации ЭК.

См. документацию и Проблема.


ОП уточняет:

У меня есть одно задание, которое запускается для каждой фиксации, и срок действия артефактов для этого задания истекает через три дня, но для того же задания, если есть фиксация с тегом, я хочу, чтобы артефакты сохранялись навсегда.


Примечание: GitLab 13.4 (сентябрь 2020 г.) добавляет интересную функцию:

Заблокируйте последний артефакт задания, чтобы предотвратить его удаление

GitLab теперь будет автоматически блокировать последний артефакт успешного задания и конвейера для любой активной ветки, MR или тега, чтобы предотвратить его удаление по истечении срока действия. Это упрощает установку более агрессивной политики истечения срока действия для очистки старых артефактов, помогает сократить потребление дискового пространства и гарантирует, что у вас всегда будет копия самого последнего артефакта из конвейера.

См. документацию и Проблема.

person VonC    schedule 23.08.2020

У вас может быть специальное задание для обработки сохраняемости артефактов, которое выполняется только для тега. Что-то типа:

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

person Schwingkopf    schedule 28.12.2020

Вы можете установить срок действия артефакта для каждого задания.

Таким образом, для задания, в котором используется конкретный тег, вы должны установить срок действия артефакта через какой-то длительный период времени.

job:
  tags:
    - your_tag
  artifacts:
    expire_in: 5 yr
person Arty-chan    schedule 27.04.2020
comment
Это правильно для заданий, которые выполняются для определенных тегов. Но я думаю, что мой вопрос не правильно написан, я отредактирую его. У меня есть одно задание, которое выполняется для каждой фиксации, и срок действия артефактов для этого задания истекает через три дня, но для того же задания, если есть фиксация с tag, я хочу, чтобы артефакты сохранялись навсегда. - person deanavenger; 27.04.2020