Jenkins分布式任务分发核心是标签匹配、资源适配、连接稳定和任务定向四点协同;主节点仅调度决策,Agent执行器实际运行任务,通过标签绑定、使用模式(灵活/专属)、Executor数量控制及稳定通信保障精准调度与资源可靠。

Jenkins 在分布式环境中分发任务,核心不是“把任务扔出去”,而是通过标签匹配、资源适配、连接稳定和任务定向四点协同实现精准调度。主节点(Master)只做决策和协调,真正干活的是代理节点(Agent),每个 Agent 上的执行器(Executor)就是实际跑任务的槽位。
用标签(Label)精准绑定任务与节点
标签是 Jenkins 分发任务最常用也最灵活的方式。给每个 Agent 打上描述性标签,比如 linux jdk-17 maven-3.9 memory-16g;在任务配置里设置 Restrict where this project can be run,填入对应标签表达式:
-
单标签匹配:填
linux,任务只会调度到带 linux 标签的节点 -
多标签组合:填
linux jdk-17(空格分隔),要求节点同时具备这两个标签 -
排除式表达:填
!windows,避开 Windows 节点 -
Pipeline 中写法:
agent { label 'performance-node' }或agent { label 'linux && docker' }
按用途/环境隔离节点使用模式
节点的“使用模式”决定它是否接受通用任务:
- 灵活模式(默认):节点可运行任何匹配标签的任务,适合日常构建、编译等通用场景
- 专属模式(Only build jobs with label expressions):节点只运行明确指定标签的任务,常用于压测机、安全扫描机或高负载测试环境,避免被其他任务抢占资源
例如,专用于 JMeter 压测的节点设为专属模式,并打上 performance 标签;所有压测 Pipeline 都指定 agent { label 'performance' },就能确保独占资源。
控制并发与资源水位,防止过载
光有标签还不够,得让节点“扛得住”。关键在两个地方:
- Executor 数量设置:在 Agent 配置中,“# of executors”建议设为 CPU 核心数的 1–1.5 倍。4 核机器设 2–3 个,8 核设 4–6 个;内存不足时宁可少设,避免 OOM
-
任务级并发限制:在 Pipeline 中用
options { disableConcurrentBuilds() }或配合锁插件(Lockable Resources Plugin)控制同一类任务的并行数,比如限制最多 2 个压测任务同时运行
确保连接可靠,任务才不卡在“派发途中”
任务下发失败,往往不是配置问题,而是通信断了:
- Agent 启动方式优先选 SSH(Linux)或 Windows Service(Windows),比 JNLP 更稳定、易管理
- 检查 Master 与 Agent 之间 TCP 端口连通性:Web 访问用 8080,Agent 通信默认走 50000(JNLP)或 SSH 的 22 端口
- 防火墙、安全组、SELinux / AppArmor 都可能拦截连接,建议先用
telnet agent-ip 22或nc -zv agent-ip 50000验证 - Agent 日志(
slave.log或 systemd journal)里出现 “Connection refused” 或 “Handshake failed” 就要查网络和证书


















