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

Jenkins Pipeline循环写入JSON文件数据被覆盖,求排查方案

Jenkins Pipeline JSON数据被覆盖的问题分析与解决

问题根源

你当前的脚本在循环内部每次生成单个设备的JSON对象就直接执行writeJSON,这会导致每次写入操作都覆盖掉文件之前的内容,最终文件里只会保留最后一个符合条件的设备数据,而非所有符合条件数据的汇总结果。

修复方案

先在循环外部初始化一个空列表,把所有符合条件的设备数据逐一添加到这个列表中,等循环结束后,再一次性将整个列表转换成JSON格式写入目标文件。修改后的脚本如下:

// 循环外部初始化空列表,用于收集所有符合条件的数据
def validDevices = []

for(String item: jsonObj.devices) {
    def os = item.os
    def osV
    if(!os.contains(".")) {
        osV = os + ".0"
    } else{
        osV = os
    }
    def osValues = osV.split('\\.') // Groovy中匹配点号需要双反斜杠转义
    // 假设values是外部已定义的对比基准变量
    if(values[0].toInteger() <= osValues[0].toInteger()) {
        def name = item.name
        def data = [
            name: name,
            os: os
        ]
        validDevices.add(data) // 将符合条件的数据追加到列表
    }
}

// 循环结束后,一次性写入所有汇总数据
if(validDevices) { // 可选:避免空列表写入空文件
    def json_str = JsonOutput.toJson(validDevices)
    def json_beauty = JsonOutput.prettyPrint(json_str)
    writeJSON(file: 'sample.json', json: json_beauty)
}

额外注意点

  • 原代码中split('\.')在Groovy语法下需要改为split('\\.'),单引号内的反斜杠需转义才能正确匹配点号。
  • 建议给所有变量添加def关键字,避免隐式全局变量引发的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:01:13