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

如何配置GitLab Pipeline仅在提交/合并到master分支时触发

问题原因

原有配置仅通过only.refs限制任务运行分支为master,未过滤Pipeline触发来源,所有master分支上下文下的触发行为(包括网页手动触发、API调用、定时任务等)都会启动该任务,因此手动运行时任务会被执行。

配置修改方案

GitLab CI提供预定义变量$CI_PIPELINE_SOURCE标识Pipeline的触发来源,只需叠加触发源过滤规则,仅保留「代码推送至master」的触发场景即可。该场景既包含开发者本地直接向master提交代码的push操作,也包含其他分支合并到master时系统自动生成合并提交、推送到master的操作,完全匹配需求。

推荐写法(使用rules语法,为GitLab官方推荐的规则方案,替代旧版only/except逻辑)

commit_to_master_notification:
  stage: build
  script:
    - echo "rest of script"
  rules:
    - if: '$CI_COMMIT_BRANCH == "master" && $CI_PIPELINE_SOURCE == "push"'

兼容旧版写法(保留原有only配置结构,无需重构语法)

commit_to_master_notification:
  stage: build
  script:
    - echo "rest of script"
  only:
    refs:
      - master
    variables:
      - $CI_PIPELINE_SOURCE == "push"
规则生效说明
  • 网页端手动点击「运行流水线」触发的任务,$CI_PIPELINE_SOURCE值为web,不满足过滤条件,任务不会执行
  • 本地直接push代码到master时,$CI_PIPELINE_SOURCE值为push,分支匹配master,任务正常执行
  • 其他分支合并到master完成后,系统自动推送合并提交到master触发的Pipeline,$CI_PIPELINE_SOURCE值为push,任务正常执行
  • 若开启MR合并前流水线、合并结果流水线,这类流水线触发源为merge_request_event,代码尚未正式合入master,不会命中规则,任务不会提前执行

内容的提问来源于stack exchange,提问作者Maciej Małkowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:33:30