如何获取已安装Jenkins插件的列表?
我在查找Jenkins远程访问API文档时没有找到相关内容。我应该使用Jenkins的CLI吗?是否有相应的文档或示例呢?
如何获取已安装Jenkins插件的列表?
我在查找Jenkins远程访问API文档时没有找到相关内容。我应该使用Jenkins的CLI吗?是否有相应的文档或示例呢?
http://<jenkins-url>/script
即可访问。(前提是您已登录并具备所需权限)。
输入以下Groovy脚本以迭代已安装的插件并打印相关信息:
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
sort
方法:def pluginList = new ArrayList(Jenkins.instance.pluginManager.plugins)
pluginList.sort { it.getShortName() }.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
现在我使用与@Behe答案下述相同的方法,更新链接:https://dev59.com/5Wkw5IYBdhLWcg3wi7Jz#35292719 (旧链接:https://dev59.com/5Wkw5IYBdhLWcg3wi7Jz#35292719)
你可以将API与depth、XPath和wrapper参数结合使用。
以下代码将查询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
curl 'http://192.168.197.133:8080/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins' | perl -pe 's/.*?<shortName>([\w-]+).*?<version>([^<]+)()(<\/\w+>)+/\1 \2\n/g'
。 - G. Lombardcurl -s -k "http://jenkins/pluginManager/api/json?depth=1" | jq '.plugins[]|{shortName, version,longName}' -c
。 - MarkHucurl -s "http://<jenkins>/pluginManager/api/json?depth=1&tree=plugins\[shortName,version,longName\]"
- Jean BobJenkins的CLI支持列出所有已安装的插件:
java -jar jenkins-cli.jar -s http://localhost:8080/ list-plugins
list-plugins
CLI 命令不需要用户具备 _Overall/RunScripts 权限_,就像 groovy
命令一样。 - José Andias如果您正在docker环境中工作,并希望以plugins.txt格式输出插件列表,以便将其传递给install_scripts.sh,请在http://{jenkins}/script
控制台中使用以下脚本:
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:latest")
}
println("${plugin.getShortName()}:latest")
- KymikoLoco使用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文档。
isActive()
API,您可以使用它来获取插件的状态。请参阅http://javadoc.jenkins-ci.org/hudson/PluginWrapper.html#isActive()。 - akhan这里的回答有些不完整。我不得不从其他来源收集信息来获取插件列表。
Jenkins CLI将允许我们从命令行与Jenkins服务器进行交互。我们可以通过一个简单的curl调用来获取它。
curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar
请将以下内容保存为 plugins.groovy
。
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}
使用你的登录用户名和密码来调用Jenkins服务器(这里是localhost:8080
),并引用Groovy脚本:
java -jar jenkins-cli.jar -s http://localhost:8080 groovy --username "admin" --password "admin" = < plugins.groovy > 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
使用curl
和jq
:
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
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>/script
URL来运行代码。
displayName
进行排序,而在打印 shortName
时,这非常令人困惑,因为有些插件在两者之间的字母顺序不同,导致列表看起来并没有排序。将 it.displayName
更改为 it.shortName
可以很好地解决这个问题。 - dragon788如果你是 Jenkins 管理员,你可以使用 Jenkins 系统信息页面:
http://<jenkinsurl>/systemInfo
http://localhost:8080/systemInfo
-- 一些服务器区分大小写。请注意,此操作需要当前登录的用户具有“Overall/Administer”权限。 - MarkHu
Jenkins.instance.pluginManager.plugins.sort({it.getDisplayName()}).each{ plugin -> println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}") }
- whelephprintln ("${plugin.getShortName()}:${plugin.getVersion()}") } null' \ | no_proxy=localhost curl --netrc --silent --data-binary @- -X POST "http://localhost:8080/jenkins/scriptText" | sort > plugins.txt
- dbaileyprintln "${it.getShortName()} | ${it.getVersion()} | ${it.getDisplayName()}" }```它将获取插件列表并按字母顺序排序,然后逐个打印每个插件的名称、版本和显示名称。
- Ed Randall