如何在 Gitlab 中禁用“分离”管道?
Posted
技术标签:
【中文标题】如何在 Gitlab 中禁用“分离”管道?【英文标题】:How to disable 'detached' pipelines in Gitlab? 【发布时间】:2021-10-27 11:47:50 【问题描述】:我们有一个普通的存储库,包含一些代码和测试。
一份工作有“规则”声明:
rules:
- changes:
- foo/**/*
- foo_scenarios/**/*
- .gitlab-ci.yml
问题是rules
的存在导致 Gitlab 运行“分离管道”,这不是我的意图,而且很烦人。有什么方法可以禁用那些“分离”的管道,但保留rules
部分?
【问题讨论】:
【参考方案1】:rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- changes:
- foo/**/*
- foo_scenarios/**/*
- .gitlab-ci.yml
when: always
我没有对此进行测试,但我相信这就是您正在寻找的。 This page 和 this one too 都易于导航,对于找到基本 gitlab-ci.yml 问题的答案非常有帮助。
Edit-Gitlab 将按顺序评估规则,一旦满足其中一个条件,它就会停止评估后续规则。在这种情况下,它将首先评估if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
,如果评估为真,则不会检查更多规则。如果第一条规则的计算结果为 false,它将继续执行下一条规则。
【讨论】:
成功了,谢谢。需要为每个带有规则的作业添加它。【参考方案2】:事情实际上更复杂,因为这取决于具体情况。所以这个解决方案可能对你有用,但其他人可能需要稍微调整一下。
这是我的理解。将规则添加到管道后,您将覆盖一些阻止开始创建合并请求管道的默认值。
@Benjamin 建议的解决方案有效,但正如您所注意到的,需要将其添加到每个作业中。所以大多数工作都需要大量重复配置。
我建议研究工作流程:它允许您定义默认行为。只有具有特殊规则的作业才需要规则。
这是一个例子:
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
如果您想更深入地了解这种行为,我已经写了一篇关于此的文章(没有 Medium 订阅的任何人的朋友链接):
Fix GitLab CI Duplicate Pipelines in Merge Requests when Using rules:
【讨论】:
不一定需要重复配置(取决于您的意思),因为可以将规则添加到作业中,然后使用extends
关键字或使用 yaml 扩展到其他作业锚点。以上是关于如何在 Gitlab 中禁用“分离”管道?的主要内容,如果未能解决你的问题,请参考以下文章
在 GitLab Pipelines 中,有没有办法在分离合并请求时运行管道?
为啥我在 Gitlab 合并请求中收到“由于未验证用户而导致管道失败”和“分离的合并请求管道”?
Gitlab-ci:如果 MR 存在则触发 merge_request 分离管道,如果不存在则触发源分支管道。这两条管道不应同时运行