Предотвращение развертывания При Сбое предыдущего этапа в GitLab CI

# #gitlab #continuous-integration #yaml #config

Вопрос:

В моем проекте определены следующие этапы gitlab-config.yaml :

 stages:
  - Prepare
  - Report
  - Static Analysis
  - Unit Test
  - Integration Test Prep
  - Integration Tests
  - Deploy
 

Предыдущая стадия Deploy есть Integration Tests , и все задания в рамках этой стадии не допускаются к сбою (что по умолчанию в соответствии с документами).

У меня есть несколько заданий развертывания, которые развертываются в разных средах. В моем задании по развертыванию производства используется следующая логика:

   rules:
    - if: $DEPLOY_ENV == "production" amp;amp; $CI_COMMIT_BRANCH == "production"
      when: always
 

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

Похоже, что использование always переопределяет тот факт, что задания предыдущего этапа не могут завершиться неудачно.

Как я могу запретить выполнение задания производственного развертывания, если какое-либо из предыдущих заданий интеграционных тестов завершится неудачно?

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

1. Есть ли причина, по которой вы должны использовать always опцию в конфигурации when? В противном случае я бы рекомендовал использовать on_success вместо этого.

2. @пэт, если ты хочешь написать это в качестве ответа, я с радостью удалю свой и отдам тебе победу.

Ответ №1:

Решение состоит в том, чтобы использовать on_success вместо always (документы):

   rules:
    - if: $DEPLOY_ENV == "production" amp;amp; $CI_COMMIT_BRANCH == "production"
      when: on_success