首页 > 解决方案 > 排除 merge_request,在 gitlab CI 管道中推送创建作业

问题描述

workflow:
   rules:
     - if : '$CI_COMMIT_BRANCH == "Sprint-Release-Branch"'
       when: never
     - if : '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PIPELINE_SOURCE == "push"' 
       when: never
     - when: always

stages:
 - Stage1
 - Stage2
 - Stage3
  
Task1:
  stage: Stage1
  script:
    - echo "Stage1"
  rules:
    - if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.DEV\d+/'
  tags:
    - Runner

Task2:
  stage: Stage1
  script:
    - echo "Checking code standard as per "Coding Standards""
  rules:
    - if: '$CI_COMMIT_TAG =~ /^\d+\.\d+\.DEV\d+/'
  allow_failure: true
  tags:
    - Runner


Task3:
  stage: Stage2
  script:
     - echo "Stage2"
  when: manual
  tags:
    - Runner


Task4:
  stage: Stage3
  script:
     - echo "Stage3"
  when: manual
  tags:
    - Runner

以上是我正在尝试的 Gitlab CI 文件

但是每当任何合并请求完成“功能分支”到“Sprint-Release-Branch”作业时,这些作业被定义为“when:manual”,就会被添加到管道中。

所以在我的情况下,开发团队正在为不同的用户故事创建不同的特性分支,然后将这些特性分支合并到具有上述 yml 文件的 Sprint-Release-Branch 上。因此,对于使用“手动”触发器定义的每个 merge_request,管道中都会不断添加多个作业

我怎样才能优化我的 yml,以使具有手动触发的作业不应该添加到管道中。

标签: gitlabgitlab-cigitlab-ce

解决方案


将其定义为“何时:手动”添加到管道中。

当你覆盖它时,你必须重复整个逻辑。

Task3:
  ...
  rules:
     - if : '$CI_COMMIT_BRANCH == "Sprint-Release-Branch"'
       when: never
     - if : '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PIPELINE_SOURCE == "push"' 
       when: never
     - when: manual

此外,最好使用when: on_success,但并非总是如此。

使用 yaml 锚点执行以下操作:

.myrules: &myrules
  if: $CI_COMMIT_BRANCH == "Sprint-Release-Branch" || ($CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PIPELINE_SOURCE == "push")
  when: never

workflow:
   rules:
     - *myrules
     - when: on_success

Task3:
  ...
  rules:
     - *myrules
     - when: manual

推荐阅读