【发布时间】:2022-01-20 12:48:52
【问题描述】:
我正在尝试使用 AQL 从存储在 Artifactory 中的 docker 图像中获取一些属性。在我的 Jenkins 管道中,我可以访问 aql api,它返回一个 JSON,但我无法遍历响应以获得我需要的内容,即 key.IWant 的值。
这是我在 Jenkinsfile 中使用的 Groovy 代码的一部分。如您所见,我尝试以 2 种不同的方式进行迭代,但都没有奏效。
// Get the JSON object from the response
def json = readJSON text: response.content
println "The follow json obj is ${json}"
def latestProps = json['results']['properties']
echo "latestProps ${latestProps}"
latestPropsRefersTo = ''
for (def prop in latestProps) {
echo "Walked through key $prop.key and value $prop.value"
if(prop.key == 'key.IWant') {
latestPropsRefersTo = prop.value
break
}
}
echo "latestPropsRefersTo ${latestPropsRefersTo}"
def latestPropsRefersTo2 = latestProps.each { key, value ->
echo "2 - Walked through key $key and value $value"
if(key == 'key.IWant') {
return value
}
}
echo "latestPropsRefersTo2 ${latestPropsRefersTo2}"
这是我得到的输出
Success: Status code 200 is in the accepted range: 100:399
[Pipeline] readJSON
[Pipeline] echo
The follow json obj is [results:[[repo:xxx, path:xxx, name:manifest.json, modified:2021-10-18T19:10:25.062-05:00, properties:[[key:key.IWant, value:01], [key:key.IDonWant, value:2021-12-17_23-59-59]]]], range:[start_pos:0, end_pos:1, total:1]]
[Pipeline] echo
latestProps [[[key:key.IWant, value:01], [key:key.IDonWant, value:2021-12-17_23-59-59]]]
[Pipeline] echo
Walked through key [key.IWant, key.IDonWant] and value [01, 2021-12-17_23-59-59]
[Pipeline] echo
latestPropsRefersTo
[Pipeline] echo
2 - Walked through key [[key:key.IWant, value:01], [key:key.IDonWant, value:2021-12-17_23-59-59]] and value null
[Pipeline] echo
latestPropsRefersTo2 [[[key:key.IWant, value:01], [key:key.IDonWant, value:2021-12-17_23-59-59]]]
[Pipeline] echo
如何正确地将 latestPropsRefersTo(或 latestPropsRefersTo2)设置为值 01? 谢谢!
编辑:我不知道为什么,但我用 prop.key.equals("key.IWant") 替换了 prop.key == 'key.IWant' 并且它起作用了 - 问题是运算符 == 的 if clause 被评估为false 并且没有设置我需要的属性。
现在一切正常。感谢大家的帮助!
【问题讨论】:
-
我不知道为什么,但我用
prop.key.equals("key.IWant")替换了prop.key == 'key.IWant',它成功了
标签: json loops groovy jenkins-pipeline