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 шт):
Проблема только в том, что не появляется 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
В итоге решил вопрос созданием дополнительного блока правил для 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