我正在寻找一种方法来防止Gitlab为一个push命令创建多个管道(目前跳过不是一个选项),例如:
git add .
git commit -m "Patch something"
git tag -a v1.0.2 -m "Releasing version v1.0.2"
git push --follow-tags
字符串
当前的Gitlab行为是创建两个管道,一个是因为我推到了一个分支,另一个是因为我添加了一个标签。
为了示例起见,假设我的管道有两个阶段:
tests
(在常规推送和标签上运行)deploy
(仅在标记上运行)。
在本例中,这意味着**tests
将为该推送运行两次**(每个管道一次)。
我曾经有两个命令:git push -o ci.skip && git push --tag
也不好,因为我跳过了一个管道,还有一个bug with badges and skipped pipelines in Gitlab。由于这个bug,我在每个标记上都有unknown
状态的标记(即使管道成功了)。
请注意,我希望tests
在推送和标记上都运行,我只是不希望它们在同一个推送中发生两次。
现在我只是接受我的一些阶段将在同一个代码库上运行两次,因为我喜欢徽章是正确的。但我很乐意避免无缘无故地使用资源。我目前的管道看起来像这样:
stages:
- tests
- deploy
tests:
stage: tests
script:
- echo "Tests"
k8s-stage:
stage: deploy
script:
- echo "Staging"
only:
- tags
型
我读过一些关于workflow keyword的文章,但我不明白它如何在这种情况下使用。我想答案就在这里,但我看不到。
有一个相关的问题here on gitlab,但似乎没有得到解决。
1条答案
按热度按时间u0sqgete1#
我希望我把你的问题解决了,这是朝着预期的方向发展的。根据GitLab的说法,使用
workflow
功能或尽可能精确地使用作业规则是您的选择。例如,对于后面提到的选项,最小化的.gitlab-ci.yml
可以如下所示:字符串
为了简单起见,在上面的示例中,每个阶段只有一个作业。你当然应该根据自己的需要调整工作规则。请注意,更改作业规则会对其执行逻辑/行为产生影响,并可能再次导致重复的管道出现。
如上所述为两个作业配置规则,作业将以以下方式运行:
1.my_test_job:仅在未设置标记且作业的触发器不是合并请求事件(例如创建或更新/推送到已经打开的合并请求)时运行=>因此,它仅用于分支管道
1.my_deploy_job:仅在设置了标记且作业的触发器不是合并请求事件时运行=>仅为标记事件运行
因此,不应再存在重复的管道。