使用插件管理器的 REST API 和 JQ 生成全面的 Jenkins 插件清单
Generating comprehensive Jenkins plugin manifest using Plugin Manager's REST API and JQ
我正在尝试使用 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?
我让这条路变得比它需要的更难。我可以从 API:
中获取插件的名称
curl -u $USERNAME:$TOKEN --globoff -H "${JENKINS_CRUMB}" "${JENKINS_URL}/pluginManager/api/json?tree=plugins[shortName]" | jq '.plugins[] | .shortName'
然后 :
java -jar jenkins-cli.jar -s $JENKINS_URL install-plugin $PLUGIN
更新
我最终选择了 SSH 选项来与 Jenkins 交互 API,它更干净,更易于使用:
ssh.exe -l "${USER}" -p 53801 "${HOST}" list-plugins | awk '{print }' > plugins.txt
for line in $(cat plugins.txt)
do
echo "Installing ${line} plugin"
ssh.exe -l "${USER}" -p 53801 "${HOST}" install-plugin $line
done
我正在尝试使用 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?
我让这条路变得比它需要的更难。我可以从 API:
中获取插件的名称curl -u $USERNAME:$TOKEN --globoff -H "${JENKINS_CRUMB}" "${JENKINS_URL}/pluginManager/api/json?tree=plugins[shortName]" | jq '.plugins[] | .shortName'
然后
java -jar jenkins-cli.jar -s $JENKINS_URL install-plugin $PLUGIN
更新
我最终选择了 SSH 选项来与 Jenkins 交互 API,它更干净,更易于使用:
ssh.exe -l "${USER}" -p 53801 "${HOST}" list-plugins | awk '{print }' > plugins.txt
for line in $(cat plugins.txt)
do
echo "Installing ${line} plugin"
ssh.exe -l "${USER}" -p 53801 "${HOST}" install-plugin $line
done