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

Groovy与Jenkins Pipeline中多collectEntries组合及数组越界问题

解决Jenkins Pipeline中组合collectEntries时的数组越界问题

我来帮你排查这个数组越界的问题——你遇到的错误根源其实是范围生成的小细节,咱们一步步来解决:

问题根源分析

你写的(0..Math.min(ports.size(), deviceIDs.size()))是Groovy的闭区间范围,比如当两个文件各有2个元素时,Math.min返回2,这个范围会包含0、1、2三个值。但你的数组索引只有0和1,当i=2时访问deviceIDs[2]或者ports[2]自然就会抛出数组越界异常。

解决方案

这里提供两种简洁的修复方式,还能优化代码的可读性:

方式一:修正范围为半开区间

把闭区间改成半开区间,确保索引不会超出数组的有效范围。Groovy支持0..<N(Groovy 3+)或者0 until N的写法,这样范围只会包含0到N-1的索引:

stage('Test') { 
    def portsFileContent = readFile 'AppiumUsedPorts.txt' 
    // 加trim()处理,避免文件中空行、空格导致的无效元素
    def ports = portsFileContent.split('\n').collect { it.trim() } 
    def deviceIDFileContent = readFile 'DeviceIDs.txt' 
    def deviceIDs = deviceIDFileContent.split('\n').collect { it.trim() } 
    
    // 用半开区间生成有效索引范围
    def pairs = (0..<Math.min(ports.size(), deviceIDs.size())).collect { i -> 
        [id: deviceIDs[i], port: ports[i]] 
    } 
    def steps = pairs.collectEntries { pair -> 
        ["UI Test on ${pair.id}", { sh "echo 'Running test with port ${pair.port}'" }] 
    }
    parallel steps 
}

方式二:用Groovy的transpose方法简化配对

Groovy集合自带的transpose方法可以直接将两个集合按索引配对,自动以较短的集合长度为准,省去手动处理索引的麻烦:

stage('Test') { 
    // 读取并处理文件内容,去除多余空格/换行
    def ports = readFile('AppiumUsedPorts.txt').split('\n').collect { it.trim() }
    def deviceIDs = readFile('DeviceIDs.txt').split('\n').collect { it.trim() }
    
    // 直接用transpose完成配对,自动截断到较短集合的长度
    def pairs = [deviceIDs, ports].transpose().collect { id, port -> 
        [id: id, port: port] 
    }
    def steps = pairs.collectEntries { pair -> 
        ["UI Test on ${pair.id}", { sh "echo 'Running test with port ${pair.port}'" }] 
    }
    parallel steps 
}

额外优化建议

  • 加上trim()处理每个元素,避免文件末尾空行、多余空格导致的无效数据
  • 如果需要严格保证两个文件的元素数量一致,可以在开头加校验逻辑:
if (ports.size() != deviceIDs.size()) {
    error "Ports and DeviceIDs count mismatch! Ports: ${ports.size()}, DeviceIDs: ${deviceIDs.size()}"
}

内容的提问来源于stack exchange,提问作者rm -rf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:01:50