我正在尝试使用curl
和jq
通过API获取一组已安装的Jenkins插件,但似乎无法正确展平嵌套数组。我正在获取的输出JSON的示例:
{
"plugins": [
{
"shortName": "foo",
"version": "6.9",
"dependencies": [
{
"shortName": "bar",
"version": "4.2.0"
},
{
"shortName": "baz",
"version": "6.6.6"
}
]
},
{
"shortName": "fah",
"version": "4.2",
"dependencies": [
{
"shortName": "bah",
"version": "1.3"
},
{
"shortName": "bar",
"version": "2.1.0"
},
{
"shortName": "baz",
"version": "6.6.6"
]
}
]
}
这就是我想要得到的结果:
[
{
"shortName": "bah",
"version": "1.3"
},
{
"shortName": "bar",
"version": "2.1.0"
},
{
"shortName": "bar",
"version": "4.2.0"
},
{
"shortName": "baz",
"version": "6.6.6"
},
{
"shortName": "fah",
"version": "4.2"
},
{
"shortName": "foo",
"version": "6.9"
},
]
我已经尝试过使用map
和flatten
的各种尝试,但是似乎无法保留父级的键,更不用说获得每个插件及其版本的完整信息了。有效载荷很容易通过curl
获得:
curl -u username:token --globoff -H "${JENKINS_CRUMB}" "${JENKINS_URL}/pluginManager/api/json?tree=plugins[shortName,version,dependencies[shortName,version]]"
我只想将输出直接传送到jq
中,以将其转换为所需的结果。我是否可以在jq
内执行此操作,还是需要对此类转换(例如Python)进行某种包装?
答案 0 :(得分:0)
我正在使这种方式变得比原来更加困难。我可以从API中获取插件的名称:
curl -u $USERNAME:$TOKEN --globoff -H "${JENKINS_CRUMB}" "${JENKINS_URL}/pluginManager/api/json?tree=plugins[shortName]" | jq '.plugins[] | .shortName'
然后是install them and their dependencies with jenkins-cli
:
java -jar jenkins-cli.jar -s $JENKINS_URL install-plugin $PLUGIN