如何在声明式Jenkins Pipeline单阶段并行运行多slave代理拷贝制品
Jenkins多Slave代理并行拷贝制品最优方案
你之前使用
&&拼接标签的方案属于用法错误:Jenkins标签表达式里的&&是要求目标节点同时具备所有指定标签,而非让任务同时运行在多个标签对应的节点上,因此会触发找不到对应节点的报错。
你最初手写多并行阶段的逻辑是正确的,只是冗余度高,通过动态生成并行阶段的方式即可解决重复编码问题。
实现方案
通过Groovy脚本动态生成并行阶段配置,无需手动编写10个子阶段,代码示例如下:
pipeline { agent none stages { stage ('Copy Artifacts to All Agents') { steps { script { // 这里填写所有需要执行拷贝的Slave标签列表,10台直接加10个元素即可 def agentLabels = [ "BS-QA-Agent-7", "BS-QA-Agent-6", // 剩余8个代理标签按同样格式补全即可 "BS-QA-Agent-5", "BS-QA-Agent-4" ] // 生成并行阶段映射 def parallelStages = agentLabels.collectEntries { label -> ["Run on ${label}" : { node(label) { stage("Copy to ${label}") { copyArtifacts projectName: "${BUILDPROJECT}", selector: lastSuccessful(), target: 'artifacts' } } }] } // 执行所有并行阶段 parallel parallelStages } } } } }
注意事项
- 该方案和你手动编写多并行阶段的执行效果完全一致,所有代理会同时执行制品拷贝操作
- 只需维护
agentLabels列表即可,新增/移除代理无需修改核心执行逻辑,冗余度极低 - 需提前确认Copy Artifact插件已安装,且对应任务的制品拷贝权限已开通
内容的提问来源于stack exchange,提问作者Ashik
相关产品推荐
相关产品推荐

