如何获取已安装的名称和版本对的Jenkins插件列表

时间:2012-03-22 01:32:45

标签: jenkins jenkins-plugins

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

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

21 个答案:

答案 0 :(得分:112)

您可以使用访问http://<jenkins-url>/script可访问的Jenkins Script Console来检索信息。 (鉴于您已登录并具有所需权限)。

Screenshot of the Script Console

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

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

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

SScreenshot of script output

此解决方案类似于one of the answers above,因为它使用Groovy,但在这里我们使用的是脚本控制台。使用Jenkins时,脚本控制台非常有用。

<强>更新

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

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

根据您的喜好调整Closure。

答案 1 :(得分:92)

这些天我使用与@Behe所描述的答案相同的方法而不是https://stackoverflow.com/a/35292719/1597808


您可以将API与depth,XPath和包装器参数结合使用。

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

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

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

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

http://<jenkins>/pluginManager/api/xml?depth=1

答案 2 :(得分:24)

Jenkins 1.588 (2 nd ,2014年11月)&amp; 1.647 (2016年2月4 th

  • Jenkins&gt;管理詹金斯

    enter image description here

  • 系统信息

    enter image description here

  • 插件

    enter image description here

答案 3 :(得分:21)

像这样使用Jenkins CLI:

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

=表示&#39;从标准输入&#39; 中读取。 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()}"

如果您想使用代码here's Jenkins Java API documentation

答案 4 :(得分:18)

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

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

答案 5 :(得分:14)

这里的答案有点不完整。我必须从其他来源编译信息才能真正获得插件列表。

1。获取Jenkins CLI

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

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获取插件结果

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

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

答案 6 :(得分:10)

带有排序插件的

Behe's answer在我的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>/script网址运行代码。

答案 7 :(得分:8)

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

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

答案 8 :(得分:7)

来自Jenkins主页:

  1. 点击管理Jenkins
  2. 点击管理插件
  3. 点击已安装标签。
  4. 或者

    1. 直接转到Jenkins网址:{Your Jenkins base URL} / pluginManager / installed

答案 9 :(得分:5)

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

http://<jenkinsurl>/systemInfo

答案 10 :(得分:4)

分享另一个选项,找到here凭据

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/ /:/'

答案 11 :(得分:3)

使用curljq

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

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

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

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

答案 12 :(得分: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

答案 13 :(得分:1)

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)

答案 14 :(得分:1)

我想要一个无需任何身份验证即可在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

答案 15 :(得分: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`

答案 16 :(得分:0)

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

答案 17 :(得分: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
##############

答案 18 :(得分:0)

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

1。获取詹金斯cli。

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

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

2。创建一个Groovy脚本。或从jenkins脚本控制台

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

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

答案 19 :(得分:0)

您也可能会对插件可用的更新感兴趣。为此,您必须将有关已安装插件的数据与此处https://updates.jenkins.io/current/update-center.json上可用的更新信息进行合并。

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

答案 20 :(得分:0)

# 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}")
    }