You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Groovy中并发执行FOR LOOP,适配Jenkins pipeline场景?

Jenkins Groovy 并行执行For循环解决方案

Jenkins Pipeline 原生提供 parallel 方法,支持传入映射格式的并行任务集合,刚好适配你遍历列表并发执行循环步骤的需求,所有任务执行完成后才会进入后续流程,对执行顺序没有限制。

适配你场景的实现代码

// 你的自定义变量列表
def vars = ['item1', 'item2', 'item3', 'item4', 'item5']
// 初始化并行任务映射表
def parallelTasks = [:]

// 遍历变量填充并行任务
for (i in vars) {
    // 必须将当前循环值赋值给临时变量,避免闭包捕获最后值的共性问题
    def currentItem = i
    parallelTasks["task-${currentItem}"] = {
        // 下方替换为你原来循环内的所有步骤
        node {
            stage("处理${currentItem}") {
                echo "当前处理变量值为: ${currentItem}"
                // 示例步骤,替换为你实际的sh、bat、build等操作
                sh 'sleep 5'
            }
        }
    }
}

// 启动所有并行任务,全部执行完成后才会继续向下执行
parallel parallelTasks

声明式Pipeline用法示例

如果你用的是声明式Pipeline,把上述逻辑放到script块中即可:

pipeline {
    agent none
    stages {
        stage('批量并行处理') {
            steps {
                script {
                    def vars = ['item1', 'item2', 'item3', 'item4', 'item5']
                    def parallelTasks = [:]
                    for (i in vars) {
                        def currentItem = i
                        parallelTasks["task-${currentItem}"] = {
                            node {
                                echo "当前处理变量: ${currentItem}"
                                // 替换为实际业务步骤
                                sh 'sleep 3'
                            }
                        }
                    }
                    // 可选添加failFast: false参数,避免单个任务失败终止所有并行任务
                    parallel parallelTasks
                }
            }
        }
    }
}

关键注意事项

  • 闭包变量捕获问题:循环内一定要先把当前遍历值赋值给临时变量再传入闭包,否则所有并行任务都会读取到循环的最后一个值,导致逻辑错误。
  • 并发数控制:如果遍历的变量数量过多,可以通过Jenkins节点的并发执行数配置限制最大并行任务量,避免占用过多构建资源。
  • 异常处理:添加parallel parallelTasks, failFast: false参数,可实现单个任务失败后其他任务继续执行,不会直接中断整个并行流程。

内容的提问来源于stack exchange,提问作者thedevopsguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:54:01