如何配置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
问题原因分析
- 存在已打开的关联MR:如果当前本地分支已经有一个处于打开状态的合并请求指向
develop分支,那么后续向该分支推送的任何提交,GitLab都会将其流水线标记为merge_request_event,并自动关联到已有的MR上,无需重新创建MR。 - 自动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
相关产品推荐
相关产品推荐

