Как прервать запущенные конвейеры gitlab - PullRequest
1 голос
/ 09 февраля 2020

Я использую webhook для запуска моего конвейера Gitlab. Иногда этот триггер срабатывает несколько раз, но мои конвейеры должны запускать только последний (генерация сайта * stati c). Прямо сейчас, это будет работать столько трубопроводов, сколько я запустил. Мой конвейер занимает 20 минут, поэтому иногда он работает до конца дня, что совершенно не нужно.

https://docs.gitlab.com/ee/ci/yaml/#interruptible и https://docs.gitlab.com/ee/user/project/pipelines/settings.html#auto -cancel-pending-pipelines работают только для принудительных коммитов, но не для триггеров

1 Ответ

0 голосов
/ 09 февраля 2020

Подобная проблема обсуждается в gitlab-org/gitlab-foss выпуске 41560

Пример использования:

Я хочу всегда pu sh тот же Docker "image: tag", например: "myapp: dev-CI". Идея состоит в том, что «myapp: dev-CI» всегда должен быть последним Docker образом приложения, которое соответствует HEAD ветви разработки.
Однако, если 2 коммита выдвинуты, то 2 конвейера запускаются и выполняются в paralell. Затем последний запущенный конвейер часто заканчивается раньше, чем самый старый.
Как следствие, помещенное Docker изображение не является последним.

Предложение :

В качестве обходного пути для * nix вы можете получить запущенные конвейеры из API и подождать, пока они не завершат, или отменить их с тем же API.
В приведенном ниже примере скрипт проверяет наличие конвейеров с более низким идентификатором для того же ветвь и спит.
jq пакет необходим для работы этого кода.

или :

  • Создать нового бегуна экземпляр
  • Сконфигурируйте его для запуска заданий, помеченных как развертывание с помощью concurrency 1
  • Добавьте тег развертывания к заданию на компакт-диске.

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

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

Сли Модификация ght :

Для меня одно небольшое изменение: я оставил глобальные настройки concurrency одинаковыми (8 участников на моей машине, поэтому одновременность: 8).
Но я пометил одного из бегунов deploy и добавил limit: 1 в его конфигурацию.
Затем я обновил свой .gitlab-ci.yml, чтобы использовать тег deploy в моей работе deploy.
Отлично работает: мой * Задание 1057 * может выполняться одновременно на 7 участниках, но deploy является «однопоточным», а любые другие deploy задания go переходят в состояние ожидания до тех пор, пока этот участник не освободится.

...