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

Jenkins并行执行TestRunner任务:如何查看各任务运行状态?

解决Jenkins并行任务状态跟踪问题

要实现每个并行TestRunner任务完成时打印状态,需要解决两个核心问题:闭包变量捕获导致的循环变量覆盖,以及捕获每次构建的结果对象。以下是修改后的代码及说明:

修改后的代码

def numberOfRuns = 0
def availableExecutors = 5
def parallelRuns = [:]

// 使用each遍历避免闭包变量捕获问题
(0..<availableExecutors).each { executorId ->
    parallelRuns["executor-${executorId}"] = {
        waitUntil {
            // 捕获构建结果对象,propagate: false确保失败不中断流程
            def buildRun = build job: 'TestRunner', 
                parameters: [string(name: 'randomBit', value: "${randomBit}")], 
                propagate: false
            
            // 打印当前任务的状态信息
            println "执行器 ${executorId} 完成第 ${++numberOfRuns} 次测试:"
            println "构建编号:${buildRun.number}"
            println "状态:${buildRun.result}"
            println "---------------------------"

            def now = new Date()
            // 到工作时间就停止循环
            return now > workDayMorning
        }
    }
}

// 执行并行任务
parallel parallelRuns

关键修改点说明

  • 解决循环变量覆盖问题:用(0..<availableExecutors).each { executorId -> }替代原for循环,each迭代时的executorId是每次循环的独立变量,闭包会正确捕获当前迭代的ID,不会被后续循环覆盖。
  • 捕获构建结果:将build步骤的返回值赋值给buildRun变量,通过buildRun.result可以直接获取任务状态(常见值:SUCCESS、FAILURE、ABORTED、UNSTABLE等)。
  • 实时打印状态:每次完成一个TestRunner构建后,立即打印执行器ID、构建序号、状态信息,确保能跟踪每个任务的执行情况。
  • 任务标识更清晰:并行任务的key设为executor-${executorId},在Jenkins界面的并行阶段中也能更直观区分不同执行器的任务。

额外优化建议

如果需要后续汇总所有任务的结果,可以在并行执行后遍历parallelRuns的返回值(Jenkins并行执行会返回每个任务的结果映射),比如:

def parallelResults = parallel parallelRuns
parallelResults.each { key, result ->
    println "任务 ${key} 最终状态:${result.result}"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:55:27