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

如何配置GitLab CI作业仅在合并到指定分支时运行?配置异常求助

GitLab CI 作业触发规则异常问题排查

我需要让build-dev作业仅在目标分支为develop的合并请求中运行,配置了如下CI脚本:

build-dev:
  stage: build
  tags:
    - development
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"
      when: always
    - when: never
#  extends: .build-base
  script:
    - echo $CI_PIPELINE_SOURCE detected. Running the build script for $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
  allow_failure: false

但实际情况是:我只是向本地分支提交代码(未创建合并请求),这个作业却被触发了,输出显示:

merge_request_event detected. Running the build script for develop

问题原因分析

  1. 存在已打开的关联MR:如果当前本地分支已经有一个处于打开状态的合并请求指向develop分支,那么后续向该分支推送的任何提交,GitLab都会将其流水线标记为merge_request_event,并自动关联到已有的MR上,无需重新创建MR。
  2. 自动MR配置:项目可能开启了自动创建合并请求的功能(比如GitLab的Auto-merge设置、第三方集成或自定义脚本),当你推送分支时自动创建了指向develop的MR,导致流水线触发。

解决方案

  • 检查并关闭无关MR:先确认当前分支是否存在已打开的指向develop的MR,若有且不再需要,直接关闭该MR,后续提交就不会触发merge_request_event流水线。
  • 强化规则校验:在规则中增加$CI_OPEN_MERGE_REQUESTS变量校验,确保只有存在打开的MR时才运行作业,避免误触发:
    build-dev:
      stage: build
      tags:
        - development
      rules:
        - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" && $CI_OPEN_MERGE_REQUESTS'
          when: always
        - when: never
      script:
        - echo $CI_PIPELINE_SOURCE detected. Running the build script for $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
      allow_failure: false
    
  • 检查自动MR设置:进入项目的Settings > Merge requests,查看是否开启了自动创建MR的相关配置,关闭不必要的自动触发逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:44:52