合并队列
使用合并队列对合并请求进行排队,并在将它们合并到目标分支之前验证它们的更改是否可以协同工作。
在频繁合并到默认分支的项目中,不同合并请求的更改可能会相互冲突。合并结果流水线确保更改适用于默认分支中的内容,但不适用于其他人同时合并的内容。
合并队列工作流
当没有合并请求等待合并,并且您选择开始合并队列时,合并队列开始。极狐GitLab 启动合并队列流水线,验证更改是否可以合并到默认分支中。第一个流水线与合并结果流水线相同,在源分支和目标分支组合在一起的变化上运行。内部合并结果提交的作者是发起合并的用户。
要在第一个流水线完成后,立即合并第二个合并请求,请选择添加到合并队列,并将其添加到队列。 第二个合并队列流水线运行在合并请求与目标分支相结合的变化上。类似地,如果您添加第三个合并请求,该流水线将在与目标分支合并的所有三个合并请求的更改上运行。流水线全部并行运行。
每个合并请求仅在以下情况下合并到目标分支:
- 合并请求的流水线成功完成。
- 在合并之前排队的所有其他合并请求。
如果合并队列流水线失败,则不会合并合并请求。极狐GitLab 从合并队列中删除该合并请求,并为在它之后排队的所有合并请求启动新的流水线。
例如:
三个合并请求(A
、B
和 C
)按顺序添加到合并队列中,将创建三个并行运行的合并结果流水线:
- 第一个流水线运行在
A
与目标分支相结合的变化上。 - 第二个流水线运行在来自
A
和B
的变化以及目标分支上。 - 第三个流水线运行在
A
、B
和C
与目标分支相结合的变化上。
如果 B
的流水线失败:
- 第一个流水线(
A
)继续运行。 -
B
从队列中移除。 -
C
的流水线被取消,一个新的流水线开始,用于从A
和C
与目标分支相结合的变化(没有B
变化)。
如果 A
成功完成,它会合并到目标分支,而 C
继续运行。添加到队列中的任何新合并请求包括目标分支中的 A
更改,以及合并队列中的 C
更改。
自动取消流水线
极狐GitLab CI/CD 检测冗余流水线,并取消它们以节省资源。
冗余合并队列流水线发生在:
- 流水线因合并队列中的合并请求之一而失败。
- 您跳过合并队列并立即合并。
- 您从合并队列中删除合并请求。
在这些情况下,极狐GitLab 必须为队列上的部分或全部合并请求创建新的合并队列流水线。旧流水线正在与合并队列中先前的组合更改进行比较,这些更改不再有效,因此这些旧流水线被取消。
启用合并队列
先决条件:
- 您必须具有维护者角色。
- 您的代码库必须是极狐GitLab 代码库,而不是外部代码库。
- 您的流水线必须配置为使用合并请求流水线。否则,您的合并请求可能会陷入未解决状态,或者您的流水线可能会被丢弃。
要启用合并队列:
- 在顶部栏中,选择 主菜单 > 项目 并找到您的项目。
- 在左侧边栏中,选择 设置 > 合并请求。
- 在 合并方法 部分,验证是否选择了 合并提交。
- 在 合并选项 部分:
- 在 13.6 及更高版本,选择 启用合并结果流水线 和 启用合并队列。
- 在 13.5 及更早版本,选择 为合并结果启用合并队列和流水线。
- 选择 保存更改。
启动合并队列
先决条件:
- 您必须具有权限,才能合并或推送到目标分支。
要启动合并队列:
- 访问合并请求。
- 选择:
- 当没有流水线运行时,启动合并队列。
- 当有流水线运行时,流水线成功时启动合并队列。
合并请求的合并队列状态显示在流水线部件下方,并显示类似于 A new merge train has started and this merge request is the first of the queue.
的消息。
现在可以将其他合并请求添加到队列中。
将合并请求添加到合并队列
先决条件:
- 您必须具有权限,才能合并或推送到目标分支。
将合并请求添加到合并队列:
- 访问合并请求。
- 选择:
- 当没有流水线运行时,启动合并队列。
- 当有流水线运行时,流水线成功时启动合并队列。
合并请求的合并队列状态显示在流水线部件下方,并带有类似 Added to the merge train. There are 2 merge requests waiting to be merged.
的消息。
每个合并队列最多可以并行运行 20 个流水线。 如果您将超过 20 个合并请求添加到合并队列,额外的合并请求将排队等待流水线完成。等待加入合并队列的排队合并请求的数量没有限制。
从合并队列中删除合并请求
要从合并队列中删除合并请求,请选择 从合并队列中删除。 您可以稍后再次将合并请求添加到合并队列。
当您从合并队列中删除合并请求时:
- 合并请求的所有流水线在删除的合并请求重新启动后排队。
- 冗余流水线被取消。
跳过合并队列并立即合并
如果您有高优先级合并请求,例如必须紧急合并的关键补丁,请选择 立即合并。
当您立即合并合并请求时:
- 重新创建当前合并队列。
- 所有流水线重新启动。
- 冗余流水线被取消。