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

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

我搜索了Jenkins远程访问API文档,但没有找到。我应该使用Jenkins的CLI吗?有文档或例子吗?

173265 次浏览

像这样使用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文档

来自Jenkins主页:

  1. 单击管理詹金斯
  2. 单击管理插件
  3. 单击安装选项卡。

  1. 直接访问Jenkins URL: {Your Jenkins base URL}/pluginManager/installed

这些天我使用与下面@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

在本例中,包装器参数是必需的,因为它将返回多个节点作为结果的一部分,因为它与XPath和多个插件节点匹配多个字段。

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

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

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

http://<jenkinsurl>/systemInfo

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

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

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

但是,您需要管理权限。

詹金斯1.588 (2nd of November, 2014) &1.647(2016年2月4th)

  • Jenkins >管理Jenkins

    enter image description here < / p >

  • < p >系统信息

    enter image description here < / p >

  • < p >插件

    enter image description here < / p >

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)

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

脚本控制台截图

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

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

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

 sscreen of script output

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

更新

如果你更喜欢一个排序的列表,你可以调用sort方法:

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

调整闭包到你喜欢的(例如,在这里它是由shortName排序,在这个例子中它是由DisplayName排序)

我认为这些都不是很好的答案……许多都涉及一些额外的底层步骤。我是这样做的。

sudo apt-get install jq

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

#!/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

与凭证共享另一个选项在这里

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

如果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`

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

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

在引用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

带有排序插件的提出的回答在我的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 URL来运行代码。

对于Jenkins 2.125版本,以下操作是有效的。

注意:将USERNAME和APIKEY替换为对应用户的有效USERNAME和APIKEY。 用户的API密钥可通过 Manage Users选择用户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
##############

有很多方法来获取这一信息,但我写的两种方法如下:-

1. 获取jenkins的命令行。

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() 插件。每个{println“$ {it.getShortName ()}: $ {it.getVersion()}”}< /代码> < / p >

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

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

我想要一个解决方案,可以在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

使用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的例子

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

如果你在docker环境中工作,想要以pluts .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")
}
我有点惊讶这里没有提到这个,但是https://plugins.jenkins.io/plugin-usage-plugin/中的pluginusage URL看起来很不错,对普通用户可用,不需要管理(只需要安装插件)。用来检查你正在使用的Jenkins服务器是否有特定的插件: http://<jenkinsurl>/pluginusage < / p >

如果你有访问主服务器,这很简单。你所要做的就是去Jenkins目录里面,你会发现插件文件夹,它包含了你需要的所有列表和数据。 在我的例子中,它位于/var/lib/jenkins/plugins