合并请求从合并火车中删除,并显示“此管道没有阶段/作业”。

时间:2019-07-29 16:28:23

标签: gitlab gitlab-ci

在合并请求(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的情况。

2 个答案:

答案 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"