如何配置Jenkins Multijob并行运行指定节点的Job A与Job B?
Hey,刚好我之前帮团队配置过类似的Jenkins Multijob场景,咱们一步步来搞定这个需求:
一、先创建Multijob主项目
首先得新建一个Multijob类型的项目,这是实现并行执行的基础:
- 登录Jenkins,点击「New Item」,输入项目名称(比如
Parallel_JobA_JobB),选择「Multijob Project」,点击「OK」进入配置页面。 - 如果需要保留参数化的灵活性(比如后续要调整节点),可以先在「This project is parameterized」区域添加参数,不过咱们先从最直接的固定节点配置讲起。
二、配置并行执行阶段
Multijob的核心是Build Phases,咱们需要添加一个并行阶段让Job A和Job B同时跑:
- 在「Build Phases」区域,点击「Add phase」,选择「Parallel Phase」,给这个阶段起个直观的名字(比如
Run_JobA_JobB_Parallel)。 - 进入这个并行阶段后,点击「Add build step」,选择「Job」,然后在「Job name」下拉框里选你的Job A;再重复一次这个操作,添加Job B到同一个并行阶段里。这样两个任务就会被同时触发。
三、给每个子任务指定专属运行节点
这部分分两种场景,你可以根据自己的需求选:
场景1:节点固定,直接在子任务里配置(推荐)
如果Job A和Job B的运行节点是固定的,直接在子任务里限制节点最省心:
- 配置Job A:
- 打开Job A的配置页面,找到「General」区域,勾选「Execute concurrent builds if necessary」(允许并发构建,这样才能在3台节点同时跑)。
- 往下找到「Restrict where this project can be run」并勾选,在「Label expression」里输入你要让Job A运行的3台slave:
- 如果你给这3台slave打了统一标签(比如
slave-group-a),直接输入slave-group-a就行; - 没打标签的话,用逻辑或写节点名:
slave-node-1 || slave-node-2 || slave-node-3。
- 如果你给这3台slave打了统一标签(比如
- 配置Job B:
- 用同样的方法,勾选「Execute concurrent builds if necessary」,然后在「Restrict where this project can be run」里输入它的3台slave标签(比如
slave-group-b)或者节点名逻辑或。
- 用同样的方法,勾选「Execute concurrent builds if necessary」,然后在「Restrict where this project can be run」里输入它的3台slave标签(比如
配置完子任务后,回到Multijob的并行阶段,不需要额外设置节点,触发Multijob时,Job A会自动在它的3台节点并行跑,Job B在自己的3台节点跑,两者同时执行。
场景2:需要动态调整节点,用参数传递
如果后续可能要调整Job A/B的运行节点,不想每次改子任务配置,可以用Multijob传递参数:
- 在Multijob的配置页面,「This project is parameterized」区域添加两个Node Parameter:
- 第一个命名为
NODE_GROUP_A,在「Node choices」里选择Job A要跑的3台slave; - 第二个命名为
NODE_GROUP_B,选择Job B要跑的3台slave。
- 第一个命名为
- 配置Job A:
- 勾选「Execute concurrent builds if necessary」,然后在「Restrict where this project can be run」的「Label expression」里输入
${NODE_GROUP_A}(引用Multijob传递的参数)。
- 勾选「Execute concurrent builds if necessary」,然后在「Restrict where this project can be run」的「Label expression」里输入
- 配置Job B:
- 同理,Label expression填
${NODE_GROUP_B},勾选并发构建。
- 同理,Label expression填
- 回到Multijob的并行阶段,添加Job A/B时,在「Parameters」区域选择「Current build parameters」,这样Multijob的参数就会传递给子任务,子任务根据参数指定的节点运行。
几个注意事项
- 确保Jenkins已经安装了Multijob Plugin和Node Label Parameter Plugin(如果用场景2的参数化方法);
- 检查slave节点的状态,确保它们在线且有足够的资源(比如空闲 executor);
- 给slave打标签比直接写节点名更灵活,后续添加/移除节点只需要调整标签就行。
内容的提问来源于stack exchange,提问作者Epligam
相关产品推荐
相关产品推荐

