合并队列

在 15.11 及更高版本,开启合并队列 按钮变更为 设置为自动合并添加到合并队列 按钮改为 合并。在私有化部署版上,这些变更不可用。要使其可用, 需要管理员启用功能标志 auto_merge_labels_mr_widget,在 SaaS 版上,此功能不可用。

使用合并队列对合并请求进行排队,并在将它们合并到目标分支之前验证它们的更改是否可以协同工作。

在频繁合并到默认分支的项目中,不同合并请求的更改可能会相互冲突。合并结果流水线确保更改适用于默认分支中的内容,但不适用于其他人同时合并的内容。

合并队列不适用于半线性历史合并请求快进式合并请求

合并队列工作流

当没有合并请求等待合并,并且您选择开始合并队列时,合并队列开始。极狐GitLab 启动合并队列流水线,验证更改是否可以合并到默认分支中。第一个流水线与合并结果流水线相同,在源分支和目标分支组合在一起的变化上运行。内部合并结果提交的作者是发起合并的用户。

要在第一个流水线完成后,立即合并第二个合并请求,请选择添加到合并队列,并将其添加到队列。 第二个合并队列流水线运行在合并请求与目标分支相结合的变化上。类似地,如果您添加第三个合并请求,该流水线将在与目标分支合并的所有三个合并请求的更改上运行。流水线全部并行运行。

每个合并请求仅在以下情况下合并到目标分支:

  • 合并请求的流水线成功完成。
  • 在合并之前排队的所有其他合并请求。

如果合并队列流水线失败,则不会合并合并请求。极狐GitLab 从合并队列中删除该合并请求,并为在它之后排队的所有合并请求启动新的流水线。

例如:

三个合并请求(ABC)按顺序添加到合并队列中,将创建三个并行运行的合并结果流水线:

  1. 第一个流水线运行在 A 与目标分支相结合的变化上。
  2. 第二个流水线运行在来自 AB 的变化以及目标分支上。
  3. 第三个流水线运行在 ABC 与目标分支相结合的变化上。

如果 B 的流水线失败:

  • 第一个流水线(A)继续运行。
  • B 从队列中移除。
  • C 的流水线被取消,一个新的流水线开始,用于从 AC 与目标分支相结合的变化(没有 B 变化)。

如果 A 成功完成,它会合并到目标分支,而 C 继续运行。添加到队列中的任何新合并请求包括目标分支中的 A 更改,以及合并队列中的 C 更改。

自动取消流水线

极狐GitLab CI/CD 检测冗余流水线,并取消它们以节省资源。

冗余合并队列流水线发生在:

在这些情况下,极狐GitLab 必须为队列上的部分或全部合并请求创建新的合并队列流水线。旧流水线正在与合并队列中先前的组合更改进行比较,这些更改不再有效,因此这些旧流水线被取消。

启用合并队列

先决条件:

  • 您必须具有维护者角色。
  • 您的代码库必须是极狐GitLab 代码库,而不是外部代码库
  • 您的流水线必须配置为使用合并请求流水线。否则,您的合并请求可能会陷入未解决状态,或者您的流水线可能会被丢弃。

要启用合并队列:

  1. 在顶部栏中,选择 主菜单 > 项目 并找到您的项目。
  2. 在左侧边栏中,选择 设置 > 合并请求
  3. 合并方法 部分,验证是否选择了 合并提交
  4. 合并选项 部分:
    • 在 13.6 及更高版本,选择 启用合并结果流水线启用合并队列
    • 在 13.5 及更早版本,选择 为合并结果启用合并队列和流水线
  5. 选择 保存更改

启动合并队列

先决条件:

  • 您必须具有权限,才能合并或推送到目标分支。

要启动合并队列:

  1. 访问合并请求。
  2. 选择:
    • 当没有流水线运行时,启动合并队列
    • 当有流水线运行时,流水线成功时启动合并队列

合并请求的合并队列状态显示在流水线部件下方,并显示类似于 A new merge train has started and this merge request is the first of the queue. 的消息。

现在可以将其他合并请求添加到队列中。

将合并请求添加到合并队列

先决条件:

  • 您必须具有权限,才能合并或推送到目标分支。

将合并请求添加到合并队列:

  1. 访问合并请求。
  2. 选择:
    • 当没有流水线运行时,启动合并队列
    • 当有流水线运行时,流水线成功时启动合并队列

合并请求的合并队列状态显示在流水线部件下方,并带有类似 Added to the merge train. There are 2 merge requests waiting to be merged. 的消息。

每个合并队列最多可以并行运行 20 个流水线。 如果您将超过 20 个合并请求添加到合并队列,额外的合并请求将排队等待流水线完成。等待加入合并队列的排队合并请求的数量没有限制。

从合并队列中删除合并请求

要从合并队列中删除合并请求,请选择 从合并队列中删除。 您可以稍后再次将合并请求添加到合并队列。

当您从合并队列中删除合并请求时:

  • 合并请求的所有流水线在删除的合并请求重新启动后排队。
  • 冗余流水线被取消

跳过合并队列并立即合并

如果您有高优先级合并请求,例如必须紧急合并的关键补丁,请选择 立即合并

当您立即合并合并请求时:

  • 重新创建当前合并队列。
  • 所有流水线重新启动。
  • 冗余流水线被取消
caution立即合并会使用大量的 CI/CD 资源。仅在紧急情况下使用此选项。