GitLab Pipeline中Merge Request作业卡住问题求助
GitLab Merge Request Pipeline作业卡住问题排查与解决
问题现象
将其他分支合并到受保护分支时,Merge Request对应的Pipeline作业卡住,系统提示:
该作业卡住的原因可能为以下情况之一:无在线的活跃Runner、受保护分支无可用Runner,或无匹配作业所有标签$RUNNER_TAG的Runner
错误提示截图:
Runner配置选项截图:
关联的.gitlab-ci.yml代码片段:
# job to check the build health in merge requests build_check: image: node:18.13.0 stage: build extends: .distributed only: - merge_requests script: - export NODE_OPTIONS="--max-old-space-size=8192" - npx nx affected --target=build --all --parallel=3 # run the unit tests unit_test: image: node:18.13.0 stage: test extends: .distributed script: - npm run test:web artifacts: paths: - $CI_PROJECT_DIR/coverage/ reports: coverage_report: coverage_format: cobertura path: $CI_PROJECT_DIR/coverage/**/**/cobertura-coverage.xml only: - develop - merge_requests
排查与解决步骤
1. 确认Runner是否在线活跃
进入项目的「CI/CD → Runner」页面,检查已配置的Runner状态是否为在线。如果Runner离线,直接重启Runner服务,或者检查Runner所在服务器的网络,确保能正常连接GitLab实例。
2. 检查受保护分支的Runner权限
查看Runner配置里的「Run untagged jobs」和「Locked to current project」选项:
- 如果Runner勾选了「Locked to current project」,必须确认该Runner的「Protected」选项已开启(在Runner详情页设置)——只有开启这个选项,Runner才能处理受保护分支的Pipeline任务。
- 要是作业通过
.distributed模板继承了标签配置,得保证Runner的标签和作业要求的$RUNNER_TAG完全匹配。
3. 核对作业标签与Runner标签的匹配度
你的两个作业都继承了.distributed模板,先查看这个模板里是否定义了tags字段。如果模板里指定了tags: [$RUNNER_TAG]这类配置,必须确保有在线的Runner带有完全一致的标签:
- 要么给现有Runner添加对应的标签;
- 要么修改
.gitlab-ci.yml,去掉作业的标签限制(如果不需要标签区分Runner的话)。
4. 确认Runner的受保护作业权限
对于受保护分支的Merge Request,Runner必须具备处理受保护分支任务的权限。在Runner的设置页,务必勾选「Protected」选项——开启后Runner才能运行来自受保护分支和受保护标签的作业。
5. 排查Runner并发数限制
检查Runner的「Maximum job concurrency」设置,如果当前Runner的并发数已经跑满,新作业会排队卡住。可以调高这个并发数,或者新增同标签的Runner来分担任务。
内容的提问来源于stack exchange,提问作者Akila Peiris
相关产品推荐
相关产品推荐

