gitlab - 排除 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”上发生合并和推送请求时,管道不应添加作业
但是每当任何合并请求完成“功能分支”到“Sprint-Release-Branch”作业时,这些作业被定义为“when:manual”,就会被添加到管道中。
所以在我的情况下,开发团队正在为不同的用户故事创建不同的特性分支,然后将这些特性分支合并到具有上述 yml 文件的 Sprint-Release-Branch 上。因此,对于使用“手动”触发器定义的每个 merge_request,管道中都会不断添加多个作业
我怎样才能优化我的 yml,以使具有手动触发的作业不应该添加到管道中。
解决方案
将其定义为“何时:手动”添加到管道中。
当你覆盖它时,你必须重复整个逻辑。
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
推荐阅读
- javascript - rebase push 将转到分支 A 或分支 B
- google-analytics - 数据工作室 | 设置日期范围时“无数据”
- agda - Windows上的Agda:`→`不在范围内
- memory-leaks - 如何让 Class 负责创建大量原始字节?
- python - 尝试获取集合的值时出现错误:TypeError: 'method' object is not subscriptable
- vue.js - 如何在 Bootstrap-Vue Table 组件中呈现自定义数据?
- ios - 更改主题时如何更新 UITableViewCell 背景颜色?
- node.js - 如何在 twilio 函数运行时环境中声明自定义函数?
- python - 如何读取 Github 存储库中的所有文本文件?
- python - 如何将 optirun 添加到 vscode 调试选项?