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
相关产品推荐
相关产品推荐

