インストールされているJenkinsプラグインのリストを、名前とバージョンのペアとともに取得する方法


160

インストールされているJenkinsプラグインのリストを取得するにはどうすればよいですか?

Jenkins Remote Access APIドキュメントを検索しましたが、見つかりませんでした。JenkinsのCLIを使用する必要がありますか?ドキュメントまたは例はありますか?

回答:


161

にアクセスしてアクセスできるJenkinsスクリプトコンソールを使用して情報を取得できますhttp://<jenkins-url>/script。(ログインしていて、必要な権限があることを前提とします)。

スクリプトコンソールのスクリーンショット

次のGroovyスクリプトを入力して、インストールされているプラ​​グインを反復処理し、関連情報を出力します。

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

次のような結果リストが出力されます(クリップ):

スクリプト出力のスクリーンショット

このソリューションは、Groovyを使用するという点で上記の回答の1つに似ていますが、ここでは代わりにスクリプトコンソールを使用しています。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でソートされています)。


2
すべての回答の中で、これはプラグインのバグレポートを提出するのに最も役立ちます。これは、標準のWeb UIを使用して実行でき、「環境」フィールドに簡単に貼り付けることができる形式で結果を提供します。
アーロンD.マラスコ

8
docker Jenkins用のplugins.txtをすばやく作成するための素晴らしい答えです!
Erik Englund 2016年

1
プラグインのリストに一貫性があるように並べ替えを追加するために役に立つかもしれません: Jenkins.instance.pluginManager.plugins.sort({it.getDisplayName()}).each{ plugin -> println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}") }
wheleph

1
これは、上記のXPath提案の代わりにローカルに切り替えた回答であり、curlリクエストと、ソースプラグインから構築された一部のプルーニングでラップされ、上記の@ErikEnglundで言及されているように、このアプローチを使用してdockerイメージのplugins.txtを生成します echo 'script=Jenkins.instance.pluginManager.plugins.each{ plugin -> println ("${plugin.getShortName()}:${plugin.getVersion()}") } null' \ | no_proxy=localhost curl --netrc --silent --data-binary @- -X POST "http://localhost:8080/jenkins/scriptText" | sort > plugins.txt
dbailey

8
並べ替えは機能しません。最近は変更できないマップです。使用:jenkins.model.Jenkins.instance.getPluginManager().getPlugins().stream().sorted().each { println "${it.getShortName()} | ${it.getVersion()} | ${it.getDisplayName()}" }
Ed Randall

96

最近では、代わりに以下の@Beheで説明されている回答と同じアプローチを使用しています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システムで実際に使用されているプラ​​グインのリストを取得する方法を知っていますか?ありがとう
user1164061 2014年

3
マックOS X.私に私のためによく働いは、プレーンテキストリストへの出力を変換したかったので、使用されるいくつかのPerlは、タグを除去するとregex: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.ロンバード

8
JSON形式の代替:curl -s -k "http://jenkins/pluginManager/api/json?depth=1" | jq '.plugins[]|{shortName, version,longName}' -c
MarkHu

1
これには管理者権限が必要だと思いますが、よくわかりません。
mkobit 2018年

2
これには2016-05-11セキュリティアドバイザリに従って管理者権限が必要であることを確認しました。
mkobit 2018年

29

ジェンキンス1.588(2 回目 11月、2014年の)&1.647(4 番目の 2月、2016年の)

  • ジェンキンス>ジェンキンスの管理

    ここに画像の説明を入力してください

  • システムインフォメーション

    ここに画像の説明を入力してください

  • プラグイン

    ここに画像の説明を入力してください


1
これは非常に簡単です。DEVサーバーとPRDサーバーからリストを取得し、Excelに貼り付けて、バージョンを並べて比較できます。
Jirong Hu 2016

24

Jenkins CLIは、インストールされているすべてのプラグインの一覧表示をサポートしています。

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


プラグインの状態は表示されません。
akhan

1
そして、list-pluginsCLIコマンドが持っているユーザーを必要としない総合的/ RunScripts許可をとしてgroovyコマンドはありません。
ホセ・Andias

これは、ユーザー/トークンが「全体/管理者」でない場合、APIトークンでは機能しないようです。
cgseller

21

次のように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のドキュメントをご覧ください


@ user1284795、これは役に立ちましたか?
malenkiy_scot

1
こんにちは、すべてのプラグインをインストールするのではなく、JenkinsシステムとJenkinsジョブで使用されるプラグインを取得する方法を知っていますか?未使用のプラグインをすべてアンインストールできるようにしたいと思います。どんな助けでもありがたいです。ありがとう!
user1164061

これは受け入れられる答えになるはずです。@ user1164061、ジョブからサーバーに見えるプラグインに違いはないと思います。isActive()この回答のgroovyスクリプトでプラグインの状態を取得するために使用できるAPI があります。javadoc.jenkins-ci.org/hudson/PluginWrapper.html#isActive()を参照してください。
akhan

20

Docker環境で作業していて、プラグインリストをplugins.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")
}

1
あなたはすべてのプラグインの最新バージョンを取得したい場合は、あなただけの短い名前を取得するには、これを拡張して追加することができます:latest最後に:println ("${plugin.getShortName()}:latest")
KymikoLoco

17

ここでの答えはやや不完全でした。そして、実際にプラグインリストを取得するには、他のソースからの情報をコンパイルする必要がありました。

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を呼び出す

localhost:8080Groovyスクリプトを参照しながら、ログインユーザー名とパスワードを使用してJenkinsサーバー(ここ)を呼び出します。

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

上記のコマンドは、ワークステーション上ではなくジェンキンスジョブで実行する必要があります
user3740244

コマンドの結果、最新バージョンでは「エラー:匿名には全体/読み取り権限がありません」と表示されるようです。代わりに、私が機能する前に認証を渡しますjava -jar jenkins-cli.jar -s localhost:8080 -auth "admin:< password> "groovy = <plugins.groovy
prasanna

12

並べ替えプラグインを使用した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>/scriptURLを使用してコードを実行します。


1
私も、最初にテストしたシステムとは異なるバージョンのJenkinsを使用してこれに遭遇しました。v2.81の場合は上位の回答が機能しましたが、LTS v2.83.xおよびそれ以降のバージョンの場合は、コードが機能しているときに前述のエラーが発生しました。
dragon788

1
私が気づいたことの1つはdisplayName、の印刷中にに基づいて並べ替えていることですshortName。これは、一部のプラグインが両方でアルファベット順に同じではなく、リストが並べ替えられていないように見えるため、非常に混乱しました。これをうまく解決するit.displayNameための変更it.shortName
dragon788

8

Jenkins管理者は、Jenkinsシステム情報ページを使用できます。

http://<jenkinsurl>/systemInfo

/systeminfoはJenkins 1.594では動作しません(HTTP 404)
G. Lombard

7
試してください- http://localhost:8080/systemInfo一部のサーバーでは大文字と小文字が区別されます。現在ログインしているユーザーが全体/管理者権限を持っている必要があることにも注意してください。
MarkHu

8

curljq

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

このコマンドは、plugins.txt依存関係を事前にインストールできるようにする特別なJenkins ファイルで使用される形式で出力を提供します(例:Dockerイメージ):

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

の例plugins.txthttps : //github.com/hoto/jenkinsfile-examples/blob/master/source/jenkins/usr/share/jenkins/plugins.txt


5

ジェンキンスのホームページから:

  1. [ Jenkinsの管理]をクリックます。
  2. [ プラグインの管理]をクリックます。
  3. [ インストール済み ]タブをクリックします。

または

  1. JenkinsのURLに直接アクセスします:{Your Jenkins base URL} / pluginManager / installed

1
「インストールされているプラ​​グイン」ページは、必ずしも実際のプラグインのステータスを反映しているわけではありません。たとえば、プラグインが再度有効になり、プラグインがチェックされているのを確認できますが、プラグインはJenkins-Restartまで無効のままです。したがって、唯一の100%ソリューションはhttp:// <jenkinsurl> / systeminfoであり、APIクエリは答えます、imho。
t0r0X 2016

4

ここにある別のオプションを資格情報と共有する

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 2017年

3

私は認証要件なしでマスターで実行できるソリューションを望んでおり、ここではそれを見ませんでした。プラグインディレクトリからすべてのバージョンを取得する簡単な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
ジェームズデュポン

2

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

また、プラグインに利用可能な更新に興味があります。そのためには、インストールされているプラ​​グインに関するデータを、https://updates.jenkins.io/current/update-center.jsonで入手できる更新に関する情報とマージする必要があります

ダウンロードしたファイルをJSONとして解析するには、2行目(巨大)をオンラインで読み取る必要があります。


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


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`

0

Jenkinsバージョン2.125の場合、以下が機能しました。

注:USERNAMEとAPIKEYを示すセクションを、対応するユーザーの有効なUserNameとAPIKeyで置き換えます。ユーザーのAPIキーは、ユーザーの 管理ユーザーの選択APIキーオプションから利用できます。

Jenkinsのインストールの開始に時間がかかる場合は、スリープを延長する必要がある場合があります。

yum update -yYumを使用してJenkinsもインストールした場合は、イニシエーションによってバージョンもアップグレードされます。

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

0

この情報を取得する方法はたくさんありますが、私は以下の2つの方法を書いています:-

1. jenkins cliを取得します。

jenkins CLIを使用すると、コマンドラインからjenkinsサーバーと対話できます。簡単なcurl呼び出しで取得できます。

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

2. groovyスクリプトを作成します。またはjenkinsスクリプトコンソールから

jenkins APIから受け取った情報を解析するためのグルーヴィーなスクリプトを作成する必要があります。これにより、各プラグインとそのバージョンが出力されます。以下をplugins.groovyとして保存します。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.