Принять запрос на слияние без выполнения ручных этапов - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть конвейер с 3 этапами: build, deploy-test и deploy-prod. Я хочу, чтобы этапы имели следующее поведение:

  • всегда запускать build
  • запускать deploy-test автоматически при master или вручную при других ветвях
  • запустить deploy-prod вручную, доступно только для master branch

Моя конфигурация конвейера, кажется, достигает этого, но у меня есть проблема при попытке объединить ветви в master. Я не хочу выполнять deploy-test stage для каждой ветви перед слиянием. Сейчас я должен сделать это, поскольку кнопка слияния отключена с сообщением Pipeline blocked. The pipeline for this merge request requires a manual action to proceed. Параметр Pipelines must succeed в проекте отключен.

Я попытался добавить дополнительное правило, чтобы запретить запуск этапа deploy-test в запросах на слияние, но ничего не изменилось:

rules:
   - if: '$CI_MERGE_REQUEST_ID'
     when: never
   - if: '$CI_COMMIT_BRANCH == "master"'
     when: on_success
   - when: manual

Полный Конфигурация трубопровода:

stages:
  - build
  - deploy-test
  - deploy-prod

build:
  stage: build
  script:
    - echo "build"

deploy-test:
  stage: deploy-test
  script:
    - echo "deploy-test"
  rules:
    - if: '$CI_COMMIT_BRANCH == "master"'
      when: on_success
    - when: manual

deploy-prod:
  stage: deploy-prod
  script:
    - echo "deploy-prod"
  only:
    - master

1 Ответ

0 голосов
/ 10 апреля 2020

Я открыл запрос на слияние из ветви "mybranch" в "master" со следующим .gitlab-ci.yml:

image: alpine

stages:
  - build
  - deploy-test
  - deploy-prod

build:
  stage: build
  script:
    - echo "build"

# run deploy-test automatically when on master or manually when on other branches
# Don't run on merge requests

deploy-test:
  stage: deploy-test
  script:
    - echo "deploy-test"
  rules:
    - if: $CI_MERGE_REQUEST_ID
      when: never
    - if: '$CI_COMMIT_BRANCH == "master"'
      when: on_success
    - when: manual


# run deploy-prod manually, only available on master branch

deploy-prod:
  stage: deploy-prod
  script:
    - echo "deploy-prod"
  rules:
    - if: '$CI_COMMIT_BRANCH == "master"'
      when: manual

Примечания:

  • only is устарел, поэтому я заменил его на if
  • Я добавил образ Alpine, чтобы ускорить выполнение заданий (более тонкий контейнер); это не влияет на логи c

Когда я отправил изменения в ветку «mybranch», GitLab сделал следующее:

  • показал синий «Объединить при конвейере» кнопка «успешно» на моем MR
  • запустила этап «сборки»
  • пропустил этап «deploy-prod» (доступно только в ветви «master»)
  • дал мне руководство » кнопка «play» для запуска задания на «mybranch»
  • , в этот момент состояние конвейера «заблокировано», а на MR отображается сообщение «конвейер заблокирован. конвейер для этого запроса на слияние требует ручного действия для продолжения»
  • теперь я вручную запускаю этап «deploy-test», выбирая значок Play на экране Pipelines.
  • индикатор состояния конвейера меняется на «работает», а затем на «пройден»
  • мой запрос на слияние показывает, что конвейер пройден и дает зеленую кнопку «Слияние»
...