インストールされているJenkinsプラグインのリストを取得するにはどうすればよいですか?
Jenkins Remote Access APIドキュメントを検索しましたが、見つかりませんでした。JenkinsのCLIを使用する必要がありますか?ドキュメントまたは例はありますか?
インストールされているJenkinsプラグインのリストを取得するにはどうすればよいですか?
Jenkins Remote Access APIドキュメントを検索しましたが、見つかりませんでした。JenkinsのCLIを使用する必要がありますか?ドキュメントまたは例はありますか?
回答:
にアクセスしてアクセスできる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でソートされています)。
Jenkins.instance.pluginManager.plugins.sort({it.getDisplayName()}).each{ plugin -> println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}") }
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
jenkins.model.Jenkins.instance.getPluginManager().getPlugins().stream().sorted().each { println "${it.getShortName()} | ${it.getVersion()} | ${it.getDisplayName()}" }
最近では、代わりに以下の@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
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'
curl -s -k "http://jenkins/pluginManager/api/json?depth=1" | jq '.plugins[]|{shortName, version,longName}' -c
次のように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()
この回答のgroovyスクリプトでプラグインの状態を取得するために使用できるAPI があります。javadoc.jenkins-ci.org/hudson/PluginWrapper.html#isActive()を参照してください。
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")
}
:latest
最後に:println ("${plugin.getShortName()}:latest")
ここでの答えはやや不完全でした。そして、実際にプラグインリストを取得するには、他のソースからの情報をコンパイルする必要がありました。
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()}"}
localhost:8080
Groovyスクリプトを参照しながら、ログインユーザー名とパスワードを使用して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
並べ替えプラグインを使用した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
。
Jenkins管理者は、Jenkinsシステム情報ページを使用できます。
http://<jenkinsurl>/systemInfo
/systeminfo
はJenkins 1.594では動作しません(HTTP 404)
http://localhost:8080/systemInfo
一部のサーバーでは大文字と小文字が区別されます。現在ログインしているユーザーが全体/管理者権限を持っている必要があることにも注意してください。
とcurl
とjq
:
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.txt
:https : //github.com/hoto/jenkinsfile-examples/blob/master/source/jenkins/usr/share/jenkins/plugins.txt
ジェンキンスのホームページから:
または
ここにある別のオプションを資格情報と共有する
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
私は認証要件なしでマスターで実行できるソリューションを望んでおり、ここではそれを見ませんでした。プラグインディレクトリからすべてのバージョンを取得する簡単な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
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)
これらは十分な答えではないと思います...多くは、いくつかの追加の裏側の手順を含みます。ここに私がそれをした方法があります。
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
また、プラグインに利用可能な更新に興味があります。そのためには、インストールされているプラグインに関するデータを、https://updates.jenkins.io/current/update-center.jsonで入手できる更新に関する情報とマージする必要があります。
ダウンロードしたファイルをJSONとして解析するには、2行目(巨大)をオンラインで読み取る必要があります。
# 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}")
}
インストールされているすべてのプラグインとそれらが有効になっているかどうかをhttp:// jenkins / systemInfoにリストした表があります
Jenkinsバージョン2.125の場合、以下が機能しました。
注:USERNAMEとAPIKEYを示すセクションを、対応するユーザーの有効なUserNameとAPIKeyで置き換えます。ユーザーのAPIキーは、ユーザーの 管理 → ユーザーの選択 → APIキーオプションから利用できます。
Jenkinsのインストールの開始に時間がかかる場合は、スリープを延長する必要がある場合があります。
yum update -y
Yumを使用して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
##############
この情報を取得する方法はたくさんありますが、私は以下の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()}"}