首页/开发/CI/CD 与发布速查/合并列车(Merge Train)
流水线设计54 条

合并列车(Merge Train)

合并请求按队列串行合入并验证「合并后」组合结果,保持主干始终可发布;冲突或失败自动回退队列。

CI/CD 与发布速查开发更新于 2026-10-13

合并列车是什么

合并列车(Merge Train)是 GitLab 为合并请求(MR)提供的串行验证机制:多个 MR 按队列依次排队,每个 MR 在「包含前序合并结果的最新快照」上运行合并后管道,验证通过才真正合入主干。它解决的是语义冲突——两个 MR 在各自分支上各自全绿,合到一起后却可能编译失败或测试互相干扰。列车保证任何时刻主干都处在「已通过合并后验证」的状态,适合要求主干随时可发布的团队。队列中的 MR 验证失败或被更新时会移出队列,后续 MR 基于新的快照重新验证。

基本信息

适用平台GitLab Premium 及以上(SaaS 与自建)
前置条件合并请求管道 + 快速管道,合并方法为 merge commit
核心语义每个 MR 在包含前序合并结果的快照上验证
失败处理当前 MR 移出队列,后续 MR 基于新快照重新验证
容量控制并行列车数按 Runner 容量配置

典型使用场景

  • 主干必须随时可发布:任何时刻从主干切出的版本都经过合并后验证,发版不必等窗口。
  • 高频合并的团队:摆脱「两个 MR 各自绿、合并后红」的手工重试,把组合验证交给队列。
  • 单仓多服务的流水线:合并后管道作为统一准入,减少主干被短时间打红的次数。
  • 配合「Pipelines must succeed」:把列车作为唯一合入通道,禁止绕过队列直接合。
  • 发布前集中修复阶段:队列自然串行化变更,定位「谁把主干弄红了」更容易。

GitLab 开启要点

GitLab 开启要点
项目 Settings → Merge requests:
- 启用 Merge trains
- Merge method 选择 merge commit
- 配置合并请求管道(为每个 MR 运行)
- 勾选 Pipelines must succeed,防止绕过队列直接合并
# 开启后:MR 页面出现 Start merge train 按钮,队列状态可见

概念对比

机制验证对象典型平台
合并列车包含前序合并结果的快照GitLab
合并队列队列合成的临时分支GitHub
直接合并仅 MR 自身分支的流水线任意平台
队列验证的代价:每个 MR 都要跑一次合并后管道,Runner 消耗按队列长度放大;并行列车数超出容量后等待反而变长。
快速管道用于在进入列车前预跑合并结果,减少「进队才发现失败」的重排;支持矩阵随版本演进,升级前核对官方文档。

易错点

  • 未启用合并请求管道就开启列车:队列语义不完整,验证对象不可靠,等于把未经合入验证的代码堆到主干。
  • 合并方法选择影响列车能力:使用 squash 或 rebase 时列车通常不可用,切换合并方法前先核对版本文档。
  • 把列车当无限并行:并行数超出 Runner 容量后排队时间显著变长,应按容量配置并监控队列等待时长。
  • 合并后管道里塞满慢作业:一次失败就重排后方全部 MR,把慢测试移出合并级管道再开启列车。
  • 忘记「Pipelines must succeed」:有人绕过队列直接合入,主干回到未经组合验证的状态。

数据来源与参考

  • GitLab Docs《Merge trains》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌