无法在Jenkins中使用jq,求嵌套JSON提取ContainerVersions最后版本方案
我来帮你搞定这个需求!首先得说你之前用的jq命令路径写错啦,咱们先修正jq的用法,再给几个适配Jenkins环境的替代方案,毕竟Jenkins里有时候工具权限或预装情况会受限。
修正后的jq命令(如果Jenkins环境能兼容的话)
你的JSON根节点是SupportedVersions数组,所以得先遍历这个数组里的每个对象,再取对应ContainerVersions的最后一个元素。正确的命令应该是:
cat your-file.json | jq '.SupportedVersions[] | .ContainerVersions[-1]'
要是想同时输出EKS版本和对应的最后一个容器版本,让结果更清晰,可以用:
cat your-file.json | jq '.SupportedVersions[] | {EKSVersion: .EKSVersion, LastContainerVersion: .ContainerVersions[-1]}'
方案1:Jenkins原生Groovy Pipeline脚本(最推荐)
Jenkins本身支持Groovy,而且自带JsonSlurper可以直接解析JSON,完全不需要额外安装工具,非常适配Jenkins环境。直接把这段代码放到你的Pipeline里就行:
script { // 读取JSON文件内容 def jsonContent = readFile file: 'your-file.json' // 解析JSON def versionData = new groovy.json.JsonSlurper().parseText(jsonContent) // 遍历每个EKS版本条目,输出最后一个容器版本 versionData.SupportedVersions.each { entry -> def eksVer = entry.EKSVersion def lastContainerVer = entry.ContainerVersions[-1] println "EKS版本 ${eksVer} 对应的最后一个容器版本:${lastContainerVer}" } }
方案2:Python脚本(Jenkins几乎都预装Python)
如果你的Jenkins节点有Python环境,写个简单的脚本也能搞定:
import json # 读取JSON文件 with open('your-file.json', 'r') as json_file: data = json.load(json_file) # 遍历并输出结果 for item in data['SupportedVersions']: print(f"EKS版本 {item['EKSVersion']}:最后一个容器版本是 {item['ContainerVersions'][-1]}")
把这个脚本存成get_last_container_version.py,然后在Jenkins里用sh 'python get_last_container_version.py'执行就行。
内容的提问来源于stack exchange,提问作者user3616775
相关产品推荐
相关产品推荐

