Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取已安装的Jenkins插件的列表,包括名称和版本对_Jenkins_Jenkins Plugins - Fatal编程技术网

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

如何获取已安装的Jenkins插件的列表,包括名称和版本对,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,如何获取已安装Jenkins插件的列表 我搜索了Jenkins Remote Access API文档,但没有找到。我应该使用Jenkins的CLI吗?是否有文档或示例?像这样使用Jenkins CLI: java -jar jenkins-cli.jar -s http://[jenkins_server] groovy = < pluginEnumerator.groovy ace-editor: 1.1 ant: 1.5 antisamy-markup-formatter: 1.5

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


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

像这样使用Jenkins CLI:

java -jar jenkins-cli.jar -s http://[jenkins_server] groovy = < pluginEnumerator.groovy
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主页上的。

  • 单击管理詹金斯
  • 单击管理插件
  • 单击已安装的选项卡
  • 直接转到Jenkins URL:{您的Jenkins基本URL}/pluginManager/installed
  • 这些天,我使用了与下面@Behe描述的答案相同的方法,而是更新了链接:(旧链接:)


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

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

    wget http://<jenkins>/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins
    
    wgethttp:///pluginManager/api/xml?depth=1&xpath=/*/*/shortName |/*/*/version&wrapper=插件
    
    在这种情况下,包装器参数是必需的,因为它返回多个节点作为结果的一部分,这两者都是因为它将多个字段与XPath和多个插件节点匹配

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

    http://<jenkins>/pluginManager/api/xml?depth=1
    
    http:///pluginManager/api/xml?depth=1
    
    如果您是Jenkins管理员,您可以使用Jenkins系统信息页面:

    http://<jenkinsurl>/systemInfo
    
    http:///systemInfo
    
    Jenkins CLI支持列出所有已安装的插件:


    java-jar-jenkins-cli.jar-shttp://localhost:8080/ 列出插件(2014年11月2日)和(2016年2月4日)Jenkins 1.588和1.647上安装的所有插件以及它们是否已启用的列表

    • 詹金斯>管理詹金斯

    • 系统信息

    • 插件


    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)
    
    来自jenkinsapi.jenkins导入jenkins
    #获取服务器实例
    jenkins_url='http://:/jenkins'
    服务器=Jenkins(Jenkins_url,用户名=“”,密码=“”)
    #获取已安装的插件列表并打印这些插件对
    plugins\u dictionary=server.get\u plugins().get\u plugins\u dict()
    对于键,plugins\u dictionary.iteritems()中的值:
    打印“插件名称:%s,版本:%s”%(键,值。版本)
    
    您可以通过访问
    http:///script
    。(假定您已登录并具有所需的权限)

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

    Jenkins.instance.pluginManager.plugins.each{
      plugin -> 
        println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
    }
    
    它将按如下方式打印结果列表(剪裁):

    此解决方案与Groovy类似,但这里我们使用的是脚本控制台。使用Jenkins时,脚本控制台非常有用

    更新

    如果您喜欢排序列表,可以将其称为:


    根据您的喜好调整闭包(例如,此处按短名称排序,示例中按显示名称排序)

    我认为这些答案不够好。。。很多都涉及到一些额外的引擎盖下的步骤。我是这样做的

    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\u HOST=用户名:password@myhost.com:端口
    
    curl-sSL“http://$JENKINS_HOST/pluginManager/api/xml?depth=1&xpath=/*/*/shortName |/*/*/version&wrapper=plugins”| perl-pe的s/*?([\w-]+).*([^如果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.获取詹金斯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
    here):

    java -jar jenkins-cli.jar -s http://localhost:8080 groovy --username "admin" --password "admin" = < plugins.groovy > plugins.txt
    
    排序插件在我的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}")
                  }
    
    List jenkinsPlugins=newarraylist(Jenkins.instance.pluginManager.plugins);
    jenkinsPlugins.sort{it.displayName}
    .每个{plugin->
    println(“${plugin.shortName}:${plugin.version}”)
    }
    

    使用
    http:///script
    URL以运行代码。

    对于Jenkins 2.125版,以下操作有效

    注意:用对应用户的有效用户名和APIKEY替换显示USERNAME和APIKEY的部分。 用户的API密钥可通过 管理用户→ 选择用户→ API密钥选项

    如果Jenkins安装需要更长的时间才能开始,您可能需要延长睡眠时间

    如果您也使用yum安装了Jenkins,则初始化
    yum更新-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.获取詹金斯cli。

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

    curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar
    
    curl'本地主机:8
    
    #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
    ##############
    
    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
    
    curl -s <jenkins_url>/pluginManager/api/json?depth=1 \
      | jq -r '.plugins[] | "\(.shortName):\(.version)"' \
      | sort
    
    ace-editor:1.1
    ant:1.8
    apache-httpcomponents-client-4-api:4.5.5-3.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}")
        }
    
    Jenkins.instance.pluginManager.plugins.each{
      plugin -> 
        println ("${plugin.getShortName()}:${plugin.getVersion()}")
    }
    
    Jenkins.instance.pluginManager.plugins.each{
      plugin -> 
        println ("${plugin.getShortName()}:latest")
    }