使用插件管理器的REST API和JQ生成全面的Jenkins插件清单

时间:2019-12-12 00:02:49

标签: jenkins jenkins-plugins jq jenkins-api

我正在尝试使用curljq通过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"
    },
]

我已经尝试过使用mapflatten的各种尝试,但是似乎无法保留父级的键,更不用说获得每个插件及其版本的完整信息了。有效载荷很容易通过curl获得:

curl -u username:token --globoff -H "${JENKINS_CRUMB}" "${JENKINS_URL}/pluginManager/api/json?tree=plugins[shortName,version,dependencies[shortName,version]]"

我只想将输出直接传送到jq中,以将其转换为所需的结果。我是否可以在jq内执行此操作,还是需要对此类转换(例如Python)进行某种包装?

1 个答案:

答案 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