Gitlab — Всегда запускайте сборку для каждого этапа

# #continuous-integration #gitlab #gitlab-ci #pipeline #continuous-deployment

Вопрос:

У меня есть 3 этапа сборки,DEV_DEPLOY,QA_DEPLOY

Я хочу запустить сборку как для этапов DEV_DEPLOY, так и для QA_DEPLOY. Объяснено ниже на скриншоте. Для меня, когда я сливаюсь с QA, выполняется только QA_DEPLOY, сборка не выполняется.

Требование — Когда разработчик запускает сборку и развертывание кода на этапе разработки , должен выполняться, когда руководитель группы объединяет ветвь из разработки в ветвь контроля качества, снова должна выполняться сборка и развертывание в контроль качества.

 stages:
  - build_proj
  - dev_deploy        
  - qa_release    
  
build: 
  stage: build_proj
  script:
    -  run build  

dev_deploy: 
  stage: dev_develop
  environment: DEV
  only:
    - develop   
    
qa_release:    
  stage: qa_release 
  dependencies:
    - build_proj 
  environment: QA
  rules:
    - if:  $CI_PIPELINE_SOURCE == "merge_request_event"
    - if:  $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == "develop"
 
 

введите описание изображения здесь

Ответ №1:

Вы можете попробовать следующие правила в своем конвейере:

 stages:
  - build
  - deploy      
  
build: 
  stage: build
  script:
    -  echo "run build"
  rules:
    - if: '$CI_COMMIT_BRANCH == "develop"' 
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" amp;amp; $CI_MERGE_REQUEST_TARGET_BRANCH == "release"'   

dev_deploy: 
  stage: deploy
  script:
    - echo "deploy dev"
  environment: DEV
  rules:
    - if: '$CI_COMMIT_BRANCH == "develop"'
    
qa_release:    
  stage: deploy
  script:
    - echo "deploy release"
  environment: QA
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" amp;amp; $CI_MERGE_REQUEST_TARGET_BRANCH == "release"'  
 
  • build этап выполняется только при выполнении коммитов для develop запросов на слияние и для них в release ветке
  • dev_deploy этап выполняется только для фиксации на develop
  • qa_release этап выполняется только для запросов на слияние в release ветку