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

207

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

我在查找Jenkins远程访问API文档时没有找到相关内容。我应该使用Jenkins的CLI吗?是否有相应的文档或示例呢?

23个回答

4

我希望找到一个可以在主服务器上运行且没有任何授权要求的解决方案,但我没有在这里找到。我编写了一个快速的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

grep Plugin-Version */META-INF/MANIFEST.MF | sed -e 's!/META-INF/MANIFEST.MF:Plugin-Version: !:!g' > ../plugins2.txt - james dupont

4

从 Jenkins 主页开始:

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

或者

  1. 直接使用Jenkins URL:{您的Jenkins基础URL}/pluginManager/installed

2
“已安装插件”页面并不一定反映真实的插件状态。例如,您可能重新启用了一个插件,并看到该插件被选中,但在Jenkins重新启动之前,该插件仍然处于禁用状态。因此,在我看来,唯一100%的解决方案是http://<jenkinsurl>/systeminfo和API查询答案。 - t0r0X

4

在这里分享另一个带有凭据的选项,链接为https://github.com/jenkinsci/docker

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

curl -sSL "http://127.0.0.1:8080/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins" | perl -pe 's/.*?<shortName>([\w-]+).*?<version>([^<]+)()(<\/\w+>)+/\1 \n/g' | sort - ffghfgh

3

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)

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

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

1
您可能也会对插件的更新感兴趣。为此,您需要将已安装插件的数据与此处提供的可用更新信息合并 https://updates.jenkins.io/current/update-center.json
要将下载的文件解析为 JSON,您需要在线阅读第二行(非常长)。

1

有很多方法可以获取这些信息,但我将写出两种方法:

1. 获取Jenkins 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()}"}


0
如果您可以访问主服务器,那么这很简单。您只需进入Jenkins目录,其中包含插件文件夹,它包含您需要的所有列表和数据。 在我的情况下,它位于/var/lib/jenkins/plugins

0

我有点惊讶这里没有提到,但是https://plugins.jenkins.io/plugin-usage-plugin/的插件使用URL看起来很不错,并且对普通用户可用,无需管理员权限(只需安装插件)。可以用来检查你正在使用的Jenkins服务器是否安装了特定的插件: http://<jenkinsurl>/pluginusage


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接