Запустите конвейер в gitlab, когда ветвь будет удалена

#bash #gitlab #yaml #gitlab-ci #gitlab-ci-runner

#bash #gitlab #yaml #gitlab-ci #gitlab-ci-runner

Вопрос:

Возможно ли запустить конвейер благодаря Gitlab CI / CD после удаления ветки.

На самом деле я хочу отредактировать файл после удаления этой ветки.

Например, у меня есть два репозитория, R1 и R2.

В R1 у меня есть 2 ветки

  • B1
  • B2

Я хочу отредактировать файл из R2, когда B1 (который является веткой R1) будет удален.

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

Ответ №1:

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

GitLab автоматически запустит действие остановки, когда соответствующая ветвь будет удалена. Задание stop_review должно находиться на той же стадии, что и задание deploy_review, чтобы среда автоматически остановилась.

 deploy_review:
  stage: deploy
  script:
    - echo "Deploy a review app"
  environment:
    name: review/$CI_COMMIT_REF_NAME
    url: https://$CI_ENVIRONMENT_SLUG.example.com
    on_stop: stop_review
  only:
    - branches
  except:
    - master

stop_review:
  stage: deploy
  variables:
    GIT_STRATEGY: none
  script:
    - echo "Implement editing files from R2 here"
  when: manual
  environment:
    name: review/$CI_COMMIT_REF_NAME
    action: stop
  

Это не совсем то, что вы хотите, но, возможно, более полезно для вас.

Комментарии:

1. Спасибо за ваш ответ, но stop_review не вызывается, когда я удаляю ветку, он будет вызываться только из ручного действия..

Ответ №2:

Ответ @Novikov — это именно то, что вам нужно, я тоже сначала думал, что это работает только вручную, но это работает автоматически. Я добавляю некоторую точность, которой нет в его ответе.

У меня была такая же утилита, как и у вас.

  • Репозиторий-1 содержит код приложения.
  • Repo-2 содержит код terraform для развертывания / уничтожения инфраструктуры приложения.

Конвейер Repo-1 запускает конвейер в моем репозитории-2, который будет развертывать приложение, и поэтому мне нужно было, чтобы удаление ветки в репозитории-1 запускало конвейер repo-2 для удаления среды.

Итак, я использовал environment функцию, документация gitlab объясняет, как ее использовать.

 deploy:
  stage: deploy
  script:
    - {...}
  environment:
    name: deployment-${CI_COMMIT_BRANCH}
    on_stop: destroy

destroy:
  stage: deploy
  variables:
    GIT_STRATEGY: none
  script:
    - {...}
  environment: 
    name: deployment-${CI_COMMIT_BRANCH}
    action: stop
  when: manual

  

ВАЖНО

  • Я знаю, что мы используем when: manual , но это работает автоматически, когда ветка удаляется / объединяется.
  • Оба задания (развертывание — уничтожение) должны иметь одинаковую стадию.
  • Для переменной GIT_STRATEGY необходимо установить значение none, иначе она попытается извлечь репозиторий из ветки, которая больше не существует, и задание завершится неудачей.
  • Используйте динамическую переменную для имени среды, иначе это не сработает, каждая среда должна иметь свое собственное имя.
  • Также важно уточнить, что environment функция не работает с trigger функцией, поэтому, если вы хотите запустить другой конвейер, вам нужно использовать API.

Источник: Документация Gitlab

Ответ №3:

Конвейер не может узнать, когда вы удалили ветку, ни через пользовательский интерфейс, ни через git branch -r -D . Конвейеры запускаются как фиксатор на сервере gitlab (при нажатии), и когда вы нажимаете кнопку Запуска конвейера вручную в пользовательском интерфейсе.

При этом можно удалить ветку из задания конвейера, поэтому, хотя я оставлю это на ваше усмотрение, чтобы определить, как вы хотите это сделать, вы можете добавить задание, которое использует trigger ключевое слово для запуска конвейера в R2 после того, как задание в вашем конвейере R1 удалит ветку.

Смотрите документы по триггеру:https://docs.gitlab.com/ee/ci/yaml/index.html#trigger и посмотрите на конвейеры с несколькими проектами.

Итак, в R2 у вас есть конвейер, который настроен на редактирование некоторого файла в R1, затем вы должны настроить задание, которое удаляет ветку B1, и выполнить это задание с помощью «триггерного задания», которое выполняется в R1 и отправляет команду в Gitlab API для запуска конвейера в R2.