gitlab-ci. При запуске pipeline не всегда учитывается environment/on_stop

Подскажите, пожалуйста, логику gitlabci. Может я не так понимаю.

Есть код для деплоймента. Прописано 4 stage:

  • build
  • smoke test
  • deploy to preprodaction (deploy_to_deployments)
  • api test

Хотел реализовать, чтобы запускался pipeline и создавалась специальная среда для review и сразу же запускались API тесты через newman:

  • после merge_request в ветку develop
  • после merge_request в ветку master
  • после пуша в ветку develop

А когда закончили review, имелась бы возможность вручную или автоматом через N дней, удалялась среду через environment/on_stop(auto_stop_in)

Сейчас прописано:

.base_rules: &base_rules
  rules:
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" && $CI_PIPELINE_SOURCE == "merge_request_event"'
      when: on_success
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" && $CI_PIPELINE_SOURCE == "merge_request_event"'
      when: on_success
    - if: '$CI_COMMIT_BRANCH == "develop" && $CI_PIPELINE_SOURCE == "push"'
      when: on_success
    - when: never

deploy to deployments server using ansible:
   stage: deploy_to_deployments
   image: williamyeh/ansible:ubuntu18.04
   <<: *base_rules
   environment:
     name: push_on_deployments_server/$CI_COMMIT_SHORT_SHA
     url: https://deployment.mydomain.com/deploy/$CI_COMMIT_SHORT_SHA/html/
     on_stop: stop on deployment server
     auto_stop_in: 1 day

stop on deployment server:
  stage: deploy_to_deployments
  image: williamyeh/ansible:ubuntu18.04
  environment:
    name: push_on_deployments_server/$CI_COMMIT_SHORT_SHA
    action: stop
  when: manual
  variables:
    GIT_STRATEGY: none

но on_stop работает странно. событие stop on deployment server появляется только если пушить в ветку develop или же если мержишь в ветку develop (с использованием комита). Сам pipeline (в том числе и deploy to deployments server using ansible) запускается когда надо, т.е. в момент merge_request develop/master + push develop. Проблема только в том, что не появляется stop on deployment server в момент именно создания merge_request

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

Спасибо


Ответы (2 шт):

Автор решения: AfsmNGhr

Проблема только в том, что не появляется stop on deployment server в момент именно создания merge_request

Полагаю, что проблема в директиве on_stop. Написано раздельно несколько слов. Сработает, если обернуть в кавычки - on_stop: 'stop on deployment server'.

Альтернативный пример - https://github.com/AfsmNGhr/gitlab-ci-cd-concept/blob/main/.gitlab-ci.yml#L228

→ Ссылка
Автор решения: beba

В итоге решил вопрос созданием дополнительного блока правил для stop job.

Создал:

.base_rules_stop: &base_rules_stop
  rules:
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" && $CI_PIPELINE_SOURCE == "merge_request_event"'
      when: manual
    - if: '$CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master" && $CI_PIPELINE_SOURCE == "merge_request_event"'
      when: manual
    - if: '$CI_COMMIT_BRANCH == "develop" && $CI_PIPELINE_SOURCE == "push"'
      when: manual
    - when: never

а в самой job прописал:

  <<: *base_rules_stop

и убрал when:manual

и все заработало так, как я того желал. событие on_stop появляется всегда и при merge_request и в момент push в devel

не совсем понятно, почему не срабатывало корректно просто when:manual, ведь по сути я указываю when:manual для всех случаев.. но как есть. всем спасибо за внимание.

p.s. Когда сделал так, то перестали выполнятся другие stage. Переделал на only и все заработало. Получилось в итоге так:

only:
    - merge_request
    - develop
  variables:
    GIT_STRATEGY: none
  environment:
    name: push_on_deployments_server/$CI_COMMIT_SHORT_SHA
    action: stop
  when: manual
→ Ссылка