在合并请求(MR)上单击开始合并训练时,GitLab将以下内容添加到MR的系统注释中:
@sferencik刚刚开始了合并火车
太好了。但是,几秒钟后,以下内容被添加到系统注释中:
@sferencik从合并列表中删除了此合并请求,因为该管道没有阶段/作业。暂时
[我的重点]
管道列表中没有新条目:合并火车甚至还没有开始。
GitLab documentation涉及到这一点。 This GitLab issue也谈到了这一点,尽管上下文不同。
我在做什么错?我已将.gitlab-ci.yml
削减到最低限度,只剩下一个阶段完成一项工作,而不是conditional。令我感到惊讶的是,为什么执行了speculative merge的GitLab应该创建一个“没有阶段/作业”的管道。
这不是 的构建问题:当我单击开始合并训练时,功能分支(我要合并的分支)上的管道已成功完成。
此外,如果我关闭pipelines for merge results,我的MR会带有 Merge 按钮,而不是开始合并训练,并且效果很好。
这始于我们从GitLab 12.0升级到12.1的情况。
答案 0 :(得分:2)
好的,所以这是由于我的错误:"pipelines for merge requests" feature要求每个作业都明确地标有
only:
- merge_requests
我的工作没有这种明确的条件。 (实际上,正如我上面所描述的,我小心翼翼地删除了工作中的所有条件。)
因此,当我点击开始合并火车时,(或将要)仅使用具有上述条件的那些作业实例化新管道。在我的情况下,根本没有作业,因此出现错误消息:该管道没有阶段/作业。。
可能的解决方案是:
.gitlab-ci.yml
,为每个作业添加“ only:merge_requests”条件标记(请阅读here,了解如何建立条件,以便您的工作不限于合并请求)答案 1 :(得分:0)
通过这种方式,您可以在“合并请求”构建和“合并训练”构建中复制作业。 您可以使用以下配置来构建仅合并请求或仅合并列车。
合并请求:
merge-request-only:
stage: build
script: echo test
only:
refs:
- merge_requests
variables:
- $CI_MERGE_REQUEST_EVENT_TYPE == "merged_result"
仅合并火车:
merge-train-only-test:
stage: build
script: echo test
only:
refs:
- merge_requests
variables:
- $CI_MERGE_REQUEST_EVENT_TYPE == "merge_train"