You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让GitLab在合并请求目标分支更新时自动触发流水线?

GitLab合并结果流水线工作机制与问题解答

背景说明

我查阅了GitLab合并结果流水线的文档,GitLab会基于源分支与目标分支的合并创建新引用,并在该引用上运行流水线。

假设合并请求(MR)的目标分支为main,源分支为topic,创建MR时的Git历史如下:

D topic
       /
      /
     /
A---B---C main

此时GitLab会创建提交C与D的合并提交E,并在该提交上运行流水线:

D topic
       / \
      /   E (GitLab流水线在此提交上运行)
     /   /
A---B---C main

若后续向topic分支推送新提交F,GitLab会再次创建合并提交以运行流水线,此时Git历史如下:

D---F topic
       / \   \
      /   E   G (第二次GitLab流水线在此提交上运行)
     /   /   /
A---B---C---' main

需注意此示例中main仍指向提交C,且G的父提交为C与F。

问题

若有人向main分支推送新提交H,而topic分支无其他变更,能否让GitLab自动基于H与F的合并为该MR创建新流水线?

答案

可以实现,只需开启GitLab内置的对应功能:

  • 确保项目已启用合并结果流水线功能(该功能在GitLab EE版本中提供)。
  • 进入项目设置的「CI/CD」→「流水线」页面,找到并开启「当目标分支更新时重新运行合并结果流水线」选项。开启后,每当目标分支(如main)有新提交推送,GitLab会自动为关联的MR创建基于最新目标分支与源分支合并后的新流水线,也就是基于H与F的合并提交运行流水线。

如果需要更灵活的控制,也可以在.gitlab-ci.yml中通过触发规则配置,示例如下:

workflow:
  rules:
    - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
      when: always
    - if: '$CI_COMMIT_BRANCH == "main"'
      changes:
        - '*'
      trigger:
        include: .gitlab-ci.yml
        strategy: depend

不过直接使用GitLab内置的开关选项是最简便的方式。

内容的提问来源于stack exchange,提问作者onlynone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:21:49