首页 > Technology > 正文

GitLab Runner 卡 Pending:排查清单

fenij 2026-08-31 39 Technology

提交代码后 pipeline 立刻变 Pending,转半天没人接,部署卡住——这是 GitLab Runner 最常见的”假死”。结论先给:Runner 没真正在线、tag 对不上、executor 崩了、并发占满、或网络连不上 coordinator,就这五类。下面一张清单按顺序查,多数十分钟能定位。

先确认 Runner 到底在不在

别急着改配置,先看项目 Settings → CI/CD → Runners 里目标 Runner 是不是绿点。灰点就是离线,机器上 systemctl status gitlab-runner 看服务在不在;不在就 systemctl start gitlab-runner && systemctl enable gitlab-runner。再用 gitlab-runner verify 确认它能连上 coordinator。

tag 对不上是头号元凶

你的 .gitlab-ci.yml 里 job 写了 tags: [docker],可注册的 Runner 没这个 tag,job 就永远 Pending。两个解法:要么在 Runner 设置里补上对应 tag,要么把 job 的 tags 去掉、并在 Runner 上开 Run untagged jobs。先 gitlab-runner list 看已注册 Runner 的 tag,再和 yml 逐字对。

executor 崩了(Docker / Shell)

Runner 在线、tag 也对,job 一接就内部失败,多半是 executor 背后的组件挂了。Docker executor 就 systemctl status docker,Docker 被 OOM kill 后 Runner 进程还活着、Docker 没了,job 必卡。重启 systemctl restart docker && systemctl restart gitlab-runner 通常就活。

并发被占满

/etc/gitlab-runner/config.tomlconcurrent 默认是 1,长任务或卡死任务占着槽,新 job 全排队。看一眼当前值:

grep concurrent /etc/gitlab-runner/config.toml
gitlab-runner list

调大:sed -i 's/^concurrent = .*/concurrent = 10/' /etc/gitlab-runner/config.toml && systemctl restart gitlab-runner。注意 concurrent 是全局并发数,不是单个 Runner 的。

网络 / Token 连不上

Runner 在线但收不到 job,常是防火墙改了、DNS 解析挂了、或 GitLab 16+ 之后旧注册 token 失效。在 Runner 机器上 curl -v https://你的gitlab域名/api/v4/version 看能不能通;自签证书就给 config.toml 加 tls-ca-file。token 过期了就 gitlab-runner register 拿新 token 重新注册。

踩坑实录

我们一条流水线突然全 Pending,Runner 列表还是绿的。我 journalctl -u gitlab-runner -f 看到不断刷 WARNING: Failed to process runner: ... executor=docker+machine。根因是当初注册时选了 docker+machine 而不是 docker,autoscaler 的 machine 选项没配,Runner 起来却拉不起执行机。改 /etc/gitlab-runner/config.toml 里 executor 为 dockergitlab-runner restart 后 pipeline 立刻跑起来。所以绿点≠能干活,日志才是真相。

五步排查速查

顺序 查什么 命令 / 动作
1 在线 Runner 绿点还是灰点 systemctl status gitlab-runner
2 tag yml 的 tags 与 Runner 一致 gitlab-runner list 逐字对
3 executor Docker / Shell 是否存活 systemctl restart docker
4 并发 槽位被占满 调大 concurrent 再 restart
5 网络 连不上 coordinator / token 失效 curl 测通 + 重注册

常见问题

Q:Runner 显示绿色但还是 Pending?
A:绿点只代表在轮询,job 仍 Pending 看日志。八成是 tag 不匹配或 executor 配置错,按上面第二、三步查。

Q:并发调到 10 还是卡?
A:说明有 job 一直占着不退(卡死或长耗时),去查具体哪个 job 卡住,不是盲目加并发。

Q:升级 GitLab 后 Runner 不接活了?
A:GitLab 16+ 弃用静态注册 token,旧 Runner 看起来在线实际收不到 job,重新 register 拿新 token。

你的 CI 还卡在 Pending 过吗?把现象贴到 fenij.com,我帮你对着清单过一遍。

排错自查清单

  • ☐ 先确认 Runner 到底在不在:别急着改配置,先看项目 Settings → CI/CD → Runners 里目标 Runner 是不是绿点
  • ☐ tag 对不上是头号元凶:你的 .gitlab-ci.yml 里 job 写了 tags: [docker],可注册的 Runner 没
  • ☐ executor 崩了(Docker / Shell):Runner 在线、tag 也对,job 一接就内部失败,多半是 executor 背后的组件挂了。Docke
  • ☐ 并发被占满:/etc/gitlab-runner/config.toml 里 concurrent 默认是 1,长任务或卡
  • ☐ 网络 / Token 连不上:Runner 在线但收不到 job,常是防火墙改了、DNS 解析挂了、或 GitLab 16+ 之后旧注册 t
  • ☐ 踩坑实录:我们一条流水线突然全 Pending,Runner 列表还是绿的。我 journalctl -u gitlab
  • ☐ 五步排查速查
  • ☐ 常见问题:Q:Runner 显示绿色但还是 Pending?A:绿点只代表在轮询,job 仍 Pending 看日志。八

关键命令速查

  • grep concurrent /etc/gitlab-runner/config.toml gitlab-runner list

相关延伸

更系统的排查思路,见 Technology 分类归档

相关完整手册

系统化的排查与配置思路,建议顺手收藏这几篇完整手册: