排除 merge_request,在 gitlab CI 管道中推送创建作业

Posted

技术标签:

【中文标题】排除 merge_request,在 gitlab CI 管道中推送创建作业【英文标题】:Exclude merge_request, push to create jobs in gitlab CI pipeline 【发布时间】:2021-12-26 13:55:37 【问题描述】:
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”上发生合并和推送请求时,管道不应添加作业

但每当任何合并请求完成“功能分支”到“Sprint-Release-Branch”作业时,定义为“何时:手动”的作业都会添加到管道中。

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

如何优化我的 yml,使具有手动触发的作业不应该添加到管道中。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

当我添加“-when:on_success”时,它给出的错误语法不正确。已验证 CI 配置,包括使用包含关键字 workflow:rules:rule 添加的所有配置,当未知值时:on_success when, can only be always or never when used with workflow. 所以它不适用于工作流

以上是关于排除 merge_request,在 gitlab CI 管道中推送创建作业的主要内容,如果未能解决你的问题,请参考以下文章

我用过的gitlab api

如何排除 gitlab-ci.yml 更改触发作业

GitLab CI - 添加标签时避免构建

对gitlab安全的一些思考

gitlabrestapi关闭mergerequest

如何将 robots.txt 与 gitlab 和 apache + 子域一起使用?