如何在 Gitlab 中禁用 'detached' 管道?
How to disable 'detached' pipelines in Gitlab?
我们有一个普通的存储库,其中包含一些代码和测试。
一个作业有 'rules' 个语句:
rules:
- changes:
- foo/**/*
- foo_scenarios/**/*
- .gitlab-ci.yml
问题是 rules
的存在导致 Gitlab 运行 'detached pipeline',这不是我的本意,这很烦人。有没有办法禁用那些 'detached' 管道,但保留 rules
部分?
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- changes:
- foo/**/*
- foo_scenarios/**/*
- .gitlab-ci.yml
when: always
我还没有测试过这个,但我相信这就是你要找的。 This page and this one too 都易于导航,对于找到基本 gitlab-ci.yml 问题的答案非常有帮助。
Edit- Gitlab 会按顺序评估规则,一旦满足其中一个条件,它就会停止评估后续规则。在这种情况下,它将首先评估 if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
,如果评估为真,则不会检查更多规则。如果第一条规则的计算结果为假,它将继续执行下一条规则。
实际情况更复杂,具体情况视具体情况而定。所以这个解决方案可能适合你,但其他人可能需要稍微调整一下。
这是我的理解。一旦您添加规则:到您的管道,您将覆盖一些默认值,这些默认值会阻止开始创建合并请求管道。
@Benjamin 建议的解决方案有效,但正如您所注意到的,需要将其添加到每项工作中。所以对于大多数作业来说,需要大量重复配置。
我建议查看工作流:它允许您定义默认行为。您只需要为有特殊规则的工作制定规则。
这是一个例子:
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
如果你想更深入地了解这种行为,我已经写了一篇关于这个的文章(朋友 link 对于任何没有 Medium 订阅的人):
Fix GitLab CI Duplicate Pipelines in Merge Requests when Using rules:
我们有一个普通的存储库,其中包含一些代码和测试。
一个作业有 'rules' 个语句:
rules:
- changes:
- foo/**/*
- foo_scenarios/**/*
- .gitlab-ci.yml
问题是 rules
的存在导致 Gitlab 运行 'detached pipeline',这不是我的本意,这很烦人。有没有办法禁用那些 'detached' 管道,但保留 rules
部分?
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- changes:
- foo/**/*
- foo_scenarios/**/*
- .gitlab-ci.yml
when: always
我还没有测试过这个,但我相信这就是你要找的。 This page and this one too 都易于导航,对于找到基本 gitlab-ci.yml 问题的答案非常有帮助。
Edit- Gitlab 会按顺序评估规则,一旦满足其中一个条件,它就会停止评估后续规则。在这种情况下,它将首先评估 if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
,如果评估为真,则不会检查更多规则。如果第一条规则的计算结果为假,它将继续执行下一条规则。
实际情况更复杂,具体情况视具体情况而定。所以这个解决方案可能适合你,但其他人可能需要稍微调整一下。
这是我的理解。一旦您添加规则:到您的管道,您将覆盖一些默认值,这些默认值会阻止开始创建合并请求管道。
@Benjamin 建议的解决方案有效,但正如您所注意到的,需要将其添加到每项工作中。所以对于大多数作业来说,需要大量重复配置。
我建议查看工作流:它允许您定义默认行为。您只需要为有特殊规则的工作制定规则。
这是一个例子:
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
如果你想更深入地了解这种行为,我已经写了一篇关于这个的文章(朋友 link 对于任何没有 Medium 订阅的人):
Fix GitLab CI Duplicate Pipelines in Merge Requests when Using rules: