Help us learn about your current experience with the documentation. Take the survey.

故障排除 merge request pipelines

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

在使用 merge request pipelines 时,您可能会遇到以下问题。

推送到分支时出现两个流水线

如果在 merge request 中出现重复的流水线,可能是因为您的流水线配置同时为分支和 merge request 运行。请调整您的流水线配置以避免重复流水线

您可以添加 workflow:rules从分支流水线切换到 merge request 流水线。在分支上创建 merge request 后,流水线会切换为 merge request 流水线。

推送无效的 CI/CD 配置文件时出现两个流水线

如果您将无效的 CI/CD 配置推送到 merge request 的分支,在流水线标签页中会出现两个失败的流水线。一个是失败的分支流水线,另一个是失败的 merge request 流水线。

当配置语法修复后,不应再出现失败的流水线。要查找并修复配置问题,您可以使用:

merge request 的流水线标记为失败,但最新的流水线成功了

在单个 merge request 的 Pipelines 标签页中,同时存在分支流水线和 merge request 流水线是可能的。这可能是由于配置,也可能是意外发生

当项目启用了 Pipelines must succeed 并且同时存在这两种流水线时,检查的是 merge request 流水线,而不是分支流水线。

因此,如果 merge request 流水线 失败,MR 流水线的结果会被标记为失败,而与 分支流水线 的结果无关。

但是:

  • 这些条件并非强制执行。
  • 存在一个竞态条件,它决定了使用哪个流水线的结果来阻止或允许 merge request 的合并。

此问题在 issue 384927 中进行跟踪。

“尝试为这个 merge request 运行新流水线时发生错误。”

当您在 merge request 中选择 Run pipeline,但项目已不再启用 merge request 流水线时,可能会发生此错误。

此错误消息的一些可能原因:

  • 项目未启用 merge request 流水线,Pipelines 标签页中没有列出任何流水线,而您选择了 Run pipelines

  • 项目之前启用了 merge request 流水线,但配置被移除了。例如:

    1. 创建 merge request 时,项目在 .gitlab-ci.yml 配置文件中启用了 merge request 流水线。
    2. merge request 的 Pipelines 标签页中提供了 Run pipeline 选项,此时选择 Run pipeline 可能不会导致任何错误。
    3. 修改了项目的 .gitlab-ci.yml 文件,移除了 merge request 流水线的配置。
    4. 对分支进行了变基(rebase),将更新后的配置带入 merge request。
    5. 现在,流水线配置不再支持 merge request 流水线,但您仍然选择 Run pipeline 来运行一个 merge request 流水线。

如果 Run pipeline 选项可用,但项目并未启用 merge request 流水线,请不要使用此选项。您可以推送一个提交或对分支进行变基来触发新的分支流水线。

“合并被阻止:流水线必须成功。推送一个修复失败的提交”消息

当 merge request 流水线、merged results pipelinemerge train pipeline 失败或被取消时,会显示此消息。当分支流水线失败时,不会发生这种情况。

如果 merge request 流水线或 merged results 流水线被取消或失败,您可以:

  • 在 merge request 的流水线标签页中选择 Run pipeline 来重新运行整个流水线。
  • 仅重试失败的作业。如果您重新运行整个流水线,则无需此操作。
  • 推送一个新的提交来修复失败。

如果 merge train 流水线失败,您可以:

  • 检查失败原因,并确定您是否可以使用 /merge 快速操作 来立即将 merge request 再次添加到 merge train 中。
  • 在 merge request 的流水线标签页中选择 Run pipeline 来重新运行整个流水线,然后将 merge request 再次添加到 merge train 中。
  • 推送一个提交来修复失败,然后将 merge request 再次添加到 merge train 中。

如果 merge request 在合并之前,其 merge train 流水线被取消(且没有失败),您可以:

  • 再次将其添加到 merge train 中。