186

如何获取已安装 Jenkins 插件的列表?

我搜索了 Jenkins Remote Access API 文档,但没有找到。我应该使用 Jenkins 的 CLI 吗?有文件或例子吗?

4

21 回答 21

206

您可以使用Jenkins 脚本控制台检索信息,该控制台可通过访问来访问http://<jenkins-url>/script。(假设您已登录并具有所需的权限)。

脚本控制台的屏幕截图

输入以下Groovy 脚本来遍历已安装的插件并打印出相关信息:

Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}

它将像这样打印结果列表(剪辑):

SS 脚本输出截图

该解决方案类似于上面的答案之一,因为它使用了 Groovy,但这里我们使用的是脚本控制台。使用 Jenkins 时,脚本控制台非常有用。

更新

如果您更喜欢排序列表,可以调用此sort方法

def pluginList = new ArrayList(Jenkins.instance.pluginManager.plugins)
pluginList.sort { it.getShortName() }.each{
  plugin -> 
    println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}

根据自己的喜好调整 Closure(例如,这里按 shortName 排序,在示例中按 DisplayName 排序)

于 2016-02-09T12:58:00.927 回答
101

这些天,我使用与下面@Behe 描述的答案相同的方法,更新链接:https ://stackoverflow.com/a/35292719/3423146 (旧链接:https ://stackoverflow.com/a/35292719/1597808 )


您可以将 API 与深度、XPath 和包装器参数结合使用。

下面将查询 pluginManager 的 API 以列出所有已安装的插件,但仅返回它们的 shortName 和 version 属性。您当然可以通过添加“|”来检索其他字段 到 XPath 参数的末尾并指定用于标识节点的模式。

wget http://<jenkins>/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins

在这种情况下需要 wrapper 参数,因为它会返回多个节点作为结果的一部分,因为它将多个字段与 XPath 和多个插件节点匹配。

在浏览器中使用以下 URL 来查看插件的哪些信息可用,然后决定使用 XPath 限制哪些内容可能很有用:

http://<jenkins>/pluginManager/api/xml?depth=1
于 2012-10-04T15:38:28.120 回答
34

Jenkins 1.588(2014 年 11 月 2 日)和1.647( 2016 年 2月4

  • 詹金斯 > 管理詹金斯

    在此处输入图像描述

  • 系统信息

    在此处输入图像描述

  • 插件

    在此处输入图像描述

于 2016-01-04T12:08:07.703 回答
26

Jenkins CLI 支持列出所有已安装的插件:

java -jar jenkins-cli.jar -s http://localhost:8080/ list-plugins

于 2013-08-05T13:48:42.857 回答
22

像这样使用 Jenkins CLI:

java -jar jenkins-cli.jar -s http://[jenkins_server] groovy = < pluginEnumerator.groovy

=在调用中表示“从标准输入读取”pluginEnumerator.groovy包含以下 Groovy 代码:

println "Running plugin enumerator"
println ""
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()} - ${it.getVersion()}"}
println ""
println "Total number of plugins: ${plugins.size()}"

如果您想使用代码,这里是 Jenkins Java API 文档

于 2012-03-22T13:01:35.670 回答
22

如果您在 docker 环境中工作并希望以 plugins.txt 格式输出插件列表以便将其传递给 install_scripts.sh,请在http://{jenkins}/script控制台中使用以下脚本:

  1. 这个版本对于获取特定的包版本很有用
Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
  1. 如果您只想要最新版本的插件,您可以使用它(感谢@KymikoLoco 的提示)
Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getShortName()}:latest")
}
于 2018-11-30T15:18:05.840 回答
19

这里的答案有些不完整。而且我必须从其他来源编译信息才能实际获取插件列表。

1. 获取 Jenkins CLI

Jenkins CLI 将允许我们从命令行与我们的 Jenkins 服务器进行交互。我们可以通过一个简单的 curl 调用来获得它。

curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar

2. 创建一个用于解析的 Groovy 脚本(感谢 malenkiy_scot)

将以下内容另存为plugins.groovy.

def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}

3.调用Jenkins API获取插件结果

localhost:8080在引用 Groovy 脚本时,使用您的登录用户名和密码调用 Jenkins 服务器(此处):

java -jar jenkins-cli.jar -s http://localhost:8080 groovy --username "admin" --password "admin" = < plugins.groovy > plugins.txt

plugins.txt 的输出如下所示:

ace-editor: 1.1
ant: 1.5
antisamy-markup-formatter: 1.5
authentication-tokens: 1.3
blueocean-autofavorite: 1.0.0
blueocean-commons: 1.1.4
blueocean-config: 1.1.4
blueocean-dashboard: 1.1.4
blueocean-display-url: 2.0
blueocean-events: 1.1.4
blueocean-git-pipeline: 1.1.4
blueocean-github-pipeline: 1.1.4
blueocean-i18n: 1.1.4
blueocean-jwt: 1.1.4
blueocean-personalization: 1.1.4
blueocean-pipeline-api-impl: 1.1.4
blueocean-pipeline-editor: 0.2.0
blueocean-pipeline-scm-api: 1.1.4
blueocean-rest-impl: 1.1.4
于 2017-07-07T20:21:11.770 回答
13

curljq:_

curl -s <jenkins_url>/pluginManager/api/json?depth=1 \
  | jq -r '.plugins[] | "\(.shortName):\(.version)"' \
  | sort

此命令以特殊 Jenkinsplugins.txt文件使用的格式提供输出,使您能够预安装依赖项(例如在 docker 映像中):

ace-editor:1.1
ant:1.8
apache-httpcomponents-client-4-api:4.5.5-3.0

示例plugins.txthttps ://github.com/hoto/jenkinsfile-examples/blob/master/source/jenkins/usr/share/jenkins/plugins.txt

于 2018-10-16T13:45:24.837 回答
12

Behe 对排序插件的回答在我的 Jenkins 机器上不起作用。由于尝试java.lang.UnsupportedOperationException对不可变集合(即Jenkins.instance.pluginManager.plugins. 代码的简单修复:

List<String> jenkinsPlugins = new ArrayList<String>(Jenkins.instance.pluginManager.plugins);
jenkinsPlugins.sort { it.displayName }
              .each { plugin ->
                   println ("${plugin.shortName}:${plugin.version}")
              }

使用http://<jenkins-url>/scriptURL 运行代码。

于 2018-01-11T02:20:45.353 回答
10

如果您是 Jenkins 管理员,您可以使用 Jenkins 系统信息页面:

http://<jenkinsurl>/systemInfo
于 2013-05-20T18:13:32.183 回答
4

从詹金斯主页:

  1. 单击管理 Jenkins
  2. 单击管理插件
  3. 单击已安装选项卡。

或者

  1. 直接进入 Jenkins URL:{Your Jenkins base URL}/pluginManager/installed
于 2012-07-10T16:06:10.163 回答
4

与凭据共享此处找到的另一个选项

JENKINS_HOST=username:password@myhost.com:port
curl -sSL "http://$JENKINS_HOST/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins" | perl -pe 's/.*?<shortName>([\w-]+).*?<version>([^<]+)()(<\/\w+>)+/\1 \2\n/g'|sed 's/ /:/'
于 2016-12-21T20:29:47.350 回答
3

我想要一个可以在没有任何身份验证要求的情况下在 master 上运行的解决方案,但在这里没有看到。我制作了一个快速的 bash 脚本,它将从插件目录中提取所有版本。

if [ -f $JENKINS_HOME/plugin_versions.txt ]; then
  rm $JENKINS_HOME/plugin_versions.txt
fi

for dir in $JENKINS_HOME/plugins/*/; do
  dir=${dir%*/}
  dir=${dir##*/}
  version=$(grep Plugin-Version $JENKINS_HOME/plugins/$dir/META-INF/MANIFEST.MF | awk -F': ' '{print $2}')
  echo $dir $version >> $JENKINS_HOME/plugin_versions.txt
done
于 2018-10-16T00:13:45.377 回答
2

我认为这些答案还不够好……许多都涉及一些额外的幕后步骤。这就是我的做法。

sudo apt-get install jq

...因为调用 API 后需要使用 JSON 输出。

#!/bin/bash
server_addr = 'jenkins'
server_port = '8080'

curl -s -k "http://${server_addr}:${server_port}/pluginManager/api/json?depth=1" \
  | jq '.plugins[]|{shortName, version,longName,url}' -c | sort \
  > plugin-list

echo "dude, here's your list: "
cat plugin-list
于 2016-10-24T18:41:36.587 回答
2

Python 用户的另一个选择:

from jenkinsapi.jenkins import Jenkins

#get the server instance
jenkins_url = 'http://<jenkins-hostname>:<jenkins-port>/jenkins'
server = Jenkins(jenkins_url, username = '<user>', password = '<password>')

#get the installed plugins as list and print the pairs
plugins_dictionary = server.get_plugins().get_plugins_dict()
for key, value in plugins_dictionary.iteritems():
    print "Plugin name: %s, version: %s" %(key, value.version)
于 2016-01-21T09:46:18.677 回答
1
# list of plugins in sorted order
# Copy this into your Jenkins script console
    def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()

    List<String> list = new ArrayList<String>()

    i = 0
    plugins.each {
      ++i
      //println " ${i}  ${it.getShortName()}: ${it.getVersion()}"
      list.add("${it.getShortName()}: ${it.getVersion()}")
    }

    list.sort{it}
    i = 0
    for (String item : list) {
      i++
      println(" ${i} ${item}")
    }
于 2018-10-24T22:09:23.353 回答
1

有很多方法可以获取此信息,但我正在编写以下两种方法:-

1. 获取 jenkins cli。

jenkins CLI 将允许我们从命令行与我们的 jenkins 服务器交互。我们可以通过一个简单的 curl 调用来获得它。

curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar

2. 创建一个 groovy 脚本。或来自詹金斯脚本控制台

我们需要创建一个 groovy 脚本来解析我们从 jenkins API 收到的信息。这将输出每个插件及其版本。将以下内容另存为 plugins.groovy。

def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins() plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}

于 2018-07-30T10:55:14.910 回答
1

您还可以对插件可用的更新感兴趣。为此,您必须将有关已安装插件的数据与此处提供的更新信息合并在一起https://updates.jenkins.io/current/update-center.json

要将下载的文件解析为 JSON,您必须在线阅读第二行(很大)。

于 2018-09-28T15:07:35.977 回答
0

对于 Jenkins 版本 2.125,以下工作。

注意:将 USERNAME 和 APIKEY 部分替换为相应用户的有效 UserName 和 APIKey。用户的 API 密钥可通过 管理用户选择用户API 密钥选项获得。

如果您的 Jenkins 安装启动时间较长,您可能需要延长睡眠时间。

如果您也使用 yum 安装了 Jenkins ,启动yum update -y也会升级版本。

#JENKINS AUTO UPDATE SCRIPT link this script into a cron
##############
!/bin/bash
sudo yum update -y
sleep 120
UPDATE_LIST=$( sudo /usr/bin/java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -auth [USERNAME:APIKEY] -s http://localhost:8080/ list-plugins | grep -e ')$' | awk '{ print $1 }' );
if [ ! -z "${UPDATE_LIST}" ]; then
    echo Updating Jenkins Plugins: ${UPDATE_LIST};
    sudo /usr/bin/java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -auth [USERNAME:APIKEY] -s http://localhost:8080/ install-plugin ${UPDATE_LIST};
    sudo /usr/bin/java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -auth [USERNAME:APIKEY] -s http://localhost:8080/ safe-restart;
fi
##############
于 2018-05-30T15:57:56.070 回答
0

如果 Jenkins 在 Jenkins Docker 容器中运行,您可以在 Bash 中使用此命令行:

java -jar /var/jenkins_home/war/WEB-INF/jenkins-cli.jar -s http://localhost:8080/ list-plugins --username admin --password `/bin/cat /var/jenkins_home/secrets/initialAdminPassword`
于 2017-05-21T19:09:37.640 回答
-1

有一个表格列出了所有已安装的插件以及它们是否在 http://jenkins/systemInfo 启用

但是,您需要管理权限。

于 2015-10-10T07:57:16.890 回答