如何让Jenkins同Pipeline任务同时运行在不同EC2节点?
解决Jenkins Pipeline无法在EC2云节点并发构建的问题
核心排查与配置步骤
1. 确认EC2云节点基础配置
- 进入
Manage Jenkins→Clouds→Amazon EC2,检查对应云配置的Instance Cap(实例上限)是否设置为2,确保Jenkins允许启动两台EC2实例。 - 检查节点模板的Number of executors是否为1,保证每个EC2实例仅能运行一个构建任务。
2. 修正Throttle Concurrent Builds插件配置
该插件未生效大概率是配置逻辑错误,正确设置如下:
- 进入目标Pipeline任务的配置页面,勾选Throttle concurrent builds。
- 设置
Max total concurrent builds为2,允许该任务同时运行2个构建。 - 设置
Max concurrent builds per node为1,强制每个节点仅能运行一个该任务的构建实例。 - 无需勾选
Throttle builds matching an expression(除非有特定表达式匹配需求),保持默认针对当前任务的限制规则。
3. 检查Pipeline的Agent配置
确保Pipeline脚本没有强制复用节点的逻辑:
- 声明式Pipeline正确写法示例:
pipeline { agent { label 'your-ec2-target-label' } stages { stage('Execute') { steps { // 你的构建步骤 } } } }
不要添加reuseNode: true(默认值为false,会强制调度新节点),也不要绑定固定自定义工作空间导致节点复用。
- 脚本式Pipeline直接使用
node('your-ec2-target-label') { ... },该语法默认请求符合标签的可用节点,若当前无空闲执行器则触发新EC2实例创建。
4. 定位队列等待原因
触发两次构建后,查看Jenkins的Build Queue,观察第二个任务的等待原因:
- 如果显示
Waiting for provisioning of new node:说明Jenkins正在尝试启动新EC2实例,可能是实例启动较慢,等待即可。 - 如果显示
Waiting for next available executor on [node-name]:说明Jenkins认为当前没有符合标签的可用节点/实例,需检查:- EC2云节点模板的标签与Pipeline指定的标签是否完全匹配。
- 全局
Manage Jenkins→Configure System中,主节点的执行器数是否设为0,避免任务被调度到主节点而非EC2云节点。
内容的提问来源于stack exchange,提问作者SipSeb
相关产品推荐
相关产品推荐

