{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- Offering: JihuLab.com, 私有化部署
{{< /details >}}
{{< history >}}
- 在极狐GitLab 16.0 及以后版本,启动和并列车 和 当流水线成功时启动合并列车 按钮变为 设置为自动合并。从和并列车移除 变为 取消自动合并。
- 对于
fast-forward
和semi-linear
合并方法的支持引入于极狐GitLab 16.5,使用名为fast_forward_merge_trains_support
的功能标志。默认启用。 - 功能标志
fast_forward_merge_trains_support
在极狐GitLab 16.11 中被移除。
{{< /history >}}
在有频繁合并到默认分支的项目中,不同的合并请求中的更改可能会互相冲突。使用合并列队可以将合并请求放入队列中。每个合并请求都会与其他较早的合并请求进行比较,以确保它们能够一起工作。
有关以下内容的更多信息:
- 如何运作合并列队,请查看合并列队工作流程。
合并列队工作流程
当没有等待合并的合并请求并且您选择 合并 或 设置为自动合并 时,合并列队开始。极狐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 必须为列队中的某些或所有合并请求创建新的合并列队流水线。旧的流水线是在合并列队中先前组合的更改上进行比较的,这些旧的流水线已不再有效,因此这些旧的流水线将被取消。
启用合并列队
{{< history >}}
-
disable_merge_trains
功能标志在极狐GitLab 16.5 中被移除。
{{< /history >}}
先决条件:
- 您必须具有维护者角色。
- 您的代码库必须是一个极狐GitLab 代码库,而不是外部代码库。
- 您的流水线必须配置为使用合并请求流水线。否则,您的合并请求可能会陷入未解决的状态或您的流水线可能会被丢弃。
- 您必须启用合并结果流水线。
要启用合并列队:
- 在左侧边栏中,选择 搜索或转到 并找到您的项目。
- 选择 设置 > 合并请求。
- 在极狐GitLab 16.4 及更早版本中,在 合并方法 部分,验证是否选择了 合并提交。在极狐GitLab 16.5 及更高版本中,您可以使用任何合并方法。
- 在 合并选项 部分,确保启用了 启用合并结果流水线 并选择 启用合并列队。
- 选择 保存更改。
启动合并列队
先决条件:
- 您必须拥有权限来合并或推送到目标分支。
要启动合并列队:
- 转到一个合并请求。
- 选择:
- 当没有流水线正在运行时,选择 合并。
- 当有流水线正在运行时,选择 设置为自动合并。
合并请求的合并列队状态显示在流水线小部件下方,显示类似于 一个新的合并列队已启动,该合并请求是队列中的第一个。查看合并列队详情。
的消息。您可以选择链接以查看合并列队。
其他合并请求现在可以被添加到列队中。
查看合并列队
{{< history >}}
- 合并列车可视化因入狱极狐GitLab 17.3。
{{< /history >}}
您可以查看合并列队,以更好地了解队列中合并请求的顺序和状态。合并列队详情页面显示队列中活跃的合并请求和已合并的合并请求。
要从合并请求列表中访问合并列队详情:
- 在左侧边栏中,选择 搜索或转到 并找到您的项目。
- 选择 代码 > 合并请求。
- 在合并请求列表上方,选择 合并列队。
- 可选。按目标分支筛选合并列队。
您还可以通过选择 查看合并列队详情 来访问此视图:
- 合并列队中的合并请求上的流水线小部件和系统备注。
- 合并列队流水线的流水线详情页面。
您还可以从合并列队详情视图中移除({{< icon name=”close” >}})合并请求。
将合并请求添加到合并列队
{{< history >}}
- 对合并列车的自动合并引入于极狐GitLab 17.2,使用名为
merge_when_checks_pass_merge_train
的功能标志。默认禁用。 - 对合并列车的自动合并在极狐GitLab 17.2 中为 JihuLab.com 启用。
- 在极狐GitLab 17.4 中,合并列车的自动合并默认启用。
- 合并列车的自动合并在极狐GitLab 17.7 中 GA。功能标志
merge_when_checks_pass_merge_train
被移除。
{{< /history >}}
先决条件:
- 您必须拥有权限来合并或推送到目标分支。
要将合并请求添加到合并列队:
- 访问一个合并请求。
- 选择:
- 当没有流水线正在运行时,选择 合并。
- 当有流水线正在运行时,选择 设置为自动合并。
合并请求的合并列队状态显示在流水线小部件下方,显示类似于 此合并请求是队列中的第 2 个,共 3 个。
的消息。
每个合并列队最多可以并行运行二十个流水线。如果您将超过二十个合并请求添加到合并列队中,则额外的合并请求将被排队,等待流水线完成。等待加入合并列队的合并请求数量没有限制。
从合并列队中移除合并请求
当您从合并列队中移除一个合并请求时:
- 在移除的合并请求之后排队的所有合并请求的流水线将重启。
- 冗余的流水线将被取消。
您可以稍后再次将合并请求添加到合并列队。
要从合并列队中移除合并请求:
- 从合并请求中,选择 取消自动合并。
- 从合并列队详情,在合并请求旁边,选择 {{< icon name=”close” >}}。
跳过合并列队并立即合并
如果您有一个高优先级的合并请求,例如必须紧急合并的关键补丁,您可以选择 立即合并。
当您立即合并一个合并请求时:
- 合并请求的提交被合并,忽略合并列队的状态。
- 合并列队中的所有其他合并请求的合并列队流水线将被取消。
- 一个新的合并列队启动,原始合并列队中的所有合并请求都被添加到这个新的合并列队中,每个都带有一个新的合并列队流水线。这些新的合并列队流水线现在包含了立即合并的合并请求所添加的提交。
{{< alert type=”warning” >}}
立即合并可能会使用大量 CI/CD 资源。仅在关键情况下使用此选项。
{{< /alert >}}
{{< alert type=”note” >}}
如果您的项目使用 fast-forward 合并方法,并且源分支落后于目标分支,则可能无法使用 立即合并 选项。
{{< /alert >}}
允许跳过合并列队以立即合并而无需重启合并列队流水线
{{< details >}}
- Status: 实验
{{< /details >}}
{{< history >}}
{{< /history >}}
{{< alert type=”flag” >}}
在极狐GitLab 私有化部署中,默认情况下此功能可用。要隐藏此功能,管理员可以禁用名为 merge_trains_skip_train
的功能标志。在 JihuLab.com 和极狐GitLab Dedicated 中,此功能可用。
{{< /alert >}}
您可以允许合并请求在不完全重启正在运行的合并列队的情况下被合并。使用此功能可以快速合并可以安全地跳过流水线的更改,例如小型文档更新。
您无法跳过 fast-forward 或半线性合并方法的合并列队。
跳过合并列队是一个实验功能。在将来的版本中可能会更改或完全移除。
{{< alert type=”warning” >}}
您可以使用此功能快速合并安全或错误修复,但跳过列队的合并请求中的更改未与列队中的任何其他合并请求进行验证。如果这些其他合并列队流水线成功完成并合并,则存在组合更改不兼容的风险。目标分支可能需要额外的工作来解决新的故障。
{{< /alert >}}
先决条件:
- 您必须具有维护者角色。
- 您必须已启用合并列队。
要启用在不重启流水线的情况下跳过列队:
- 在左侧边栏中,选择 搜索或转到 并找到您的项目。
- 选择 设置 > 合并请求。
- 在 合并选项 部分,确保启用了 启用合并结果流水线 和 启用合并列队 选项。
- 选择 允许跳过合并列队。
- 选择 保存更改。
要通过跳过合并列队来合并合并请求,请使用 合并请求合并 API 端点 进行合并,属性 skip_merge_train
设置为 true
。
合并请求将被合并,现有的合并列队流水线不会被取消或重启。
故障排除
合并请求从合并列队中移除
如果合并列队流水线正在运行时合并请求变得不可合并,合并列队将自动移除您的合并请求。例如,这可能是由以下原因引起的:
您可以在系统备注中找到合并请求被移除的原因。在 概览 标签的 活动 部分中检查类似于:用户因为...移除此合并请求出合并列队。
的消息。
无法使用自动合并
当合并列队启用时,您无法使用自动合并(以前称为 当流水线成功时合并)跳过合并列队。
无法重试合并列队流水线
当合并列队流水线失败时,合并请求将从列队中移除,并且流水线在失败后无法重试。合并列队流水线在合并请求中的更改和已经在列队中的其他合并请求的更改的合并结果上运行。如果合并请求从列队中移除,合并结果已过期,流水线无法重试。
您可以:
- 再次将合并请求添加到列队,这将触发新的流水线。
- 如果作业间歇性失败,可以在作业中添加
retry
关键字。如果重试后成功,合并请求不会从合并列队中移除。
无法将合并请求添加到合并列队
当启用流水线必须成功时,但最新的流水线失败:
- 设置为自动合并 或 合并 选项不可用。
- 合并请求显示
此合并请求的流水线失败。请重试作业或推送新提交以修复故障。
在您可以重新将合并请求添加到合并列队之前,您可以尝试:
- 重试失败的作业。如果它通过,并且没有其他作业失败,则流水线被标记为成功。
- 重新运行整个流水线。在 流水线 标签上,选择 运行流水线。
- 推送一个修复问题的新提交,这也会触发新的流水线。