GitLab CI手动触发流水线失败:多源触发规则配置问题排查
GitLab CI空流水线排查思路及修复
问题根源
你配置的build-dev任务规则中,$CI_MERGE_REQUEST_TARGET_BRANCH_NAME变量仅在**合并请求事件(merge_request_event)**中才会被GitLab注入。当你直接在develop分支手动触发流水线(此时CI_PIPELINE_SOURCE为web,但无关联合并请求),该变量未定义,导致整个规则条件不满足,任务不会被执行,最终生成空流水线。
排查与修复步骤
- 验证变量存在性:手动触发develop分支流水线后,进入流水线详情页的「CI/CD变量」面板,确认
CI_MERGE_REQUEST_TARGET_BRANCH_NAME不存在,因此规则中的... && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop"条件无法成立。 - 调整规则逻辑:拆分规则,分别适配合并请求场景和develop分支手动触发场景:
build-dev: stage: build tags: - development rules: # 合并请求目标为develop时触发 - if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" # 直接在develop分支手动触发时允许执行 - if: $CI_PIPELINE_SOURCE == "web" && $CI_COMMIT_BRANCH == "develop" extends: .build-base allow_failure: false - 测试规则覆盖:分别验证两种场景:
- 创建目标为develop的合并请求,确认流水线能触发build-dev任务;
- 直接在develop分支手动启动流水线,确认任务正常执行。
额外检查点
- 确认
.build-base模板中没有额外的rules或only/except配置,避免覆盖当前任务的规则; - 检查GitLab项目的CI/CD设置,确保已启用「手动触发流水线」的权限;
- 若部署阶段的任务也有类似规则限制,需同步调整逻辑,确保部署任务能在对应场景下触发。
内容的提问来源于stack exchange,提问作者pbuchheit
相关产品推荐
相关产品推荐

