Jenkins 2.4 版本接了两台构建机,流水线里写了 agent any,任务却一直停在 Waiting for next available executor,节点列表里两台机器都显示在线且空闲。

一开始怀疑是「流水线里写的是 agent { label 'docker' },节点标签是 docker-build」,查了一圈,方向不对。

把日志和配置对完,能解释这个现象的基本就这几处。节点的标签和流水线里写的 label 不一致,调度时匹配不到。少数情况下是节点的执行器数量设成了 0,在线但没有并发槽位。

另外,节点虽然显示在线,但实际是断线重连的僵尸会话。

动手时先看节点的标签和执行器数量

curl -s http://jenkins:8080/computer/api/json | head -40

随后按流水线里的标签给节点补上

java -jar agent.jar -url http://jenkins:8080/ -secret xxx -name build-01 -labels docker

接着确认节点确实接上了任务

curl -s http://jenkins:8080/computer/build-01/api/json | grep -i offline

剩下的就是重跑一次流水线看是否被调度

tail -f /var/log/jenkins/jenkins.log | grep -i executor

别只看报错消失,验证要多做一步。节点页面显示在线且执行器数量正确,流水线在 10 秒内分配到构建机,控制台输出不再停在等待执行器。

标签是大小写敏感的,docker 和 Docker 会被当成两个;节点掉线后 Jenkins 仍可能显示在线,重启 agent 进程最直接。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189