Bagaimana saya bisa mendapatkan daftar plugin Jenkins yang diinstal?
Saya mencari dokumen Jenkins Remote Access API, tetapi tidak ditemukan. Haruskah saya menggunakan CLI Jenkins? Apakah ada dokumen atau contoh?
Bagaimana saya bisa mendapatkan daftar plugin Jenkins yang diinstal?
Saya mencari dokumen Jenkins Remote Access API, tetapi tidak ditemukan. Haruskah saya menggunakan CLI Jenkins? Apakah ada dokumen atau contoh?
Jawaban:
Anda dapat mengambil informasi menggunakan Konsol Script Jenkins yang dapat diakses dengan mengunjungi http://<jenkins-url>/script
. (Mengingat bahwa Anda masuk dan memiliki izin yang diperlukan).
Masukkan skrip Groovy berikut untuk beralih di atas plugin yang diinstal dan mencetak informasi yang relevan:
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
Ini akan mencetak daftar hasil seperti ini (terpotong):
Solusi ini mirip dengan salah satu jawaban di atas karena menggunakan Groovy, tetapi di sini kita menggunakan konsol skrip. Konsol script sangat membantu saat menggunakan Jenkins.
Memperbarui
Jika Anda lebih suka daftar yang diurutkan, Anda dapat memanggil sort
metode ini :
def pluginList = new ArrayList(Jenkins.instance.pluginManager.plugins)
pluginList.sort { it.getShortName() }.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
Sesuaikan Penutupan dengan keinginan Anda (mis. Di sini disortir oleh shortName, pada contoh disortir oleh 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()}" }
Hari ini saya menggunakan pendekatan yang sama dengan jawaban yang dijelaskan oleh @Behe di bawah ini alih-alih https://stackoverflow.com/a/35292719/1597808
Anda dapat menggunakan API dalam kombinasi dengan argumen depth, XPath, dan wrapper.
Berikut ini akan menanyakan API dari pluginManager ke daftar semua plugin yang diinstal, tetapi hanya untuk mengembalikan atribut shortName dan versi mereka. Tentu saja Anda dapat mengambil bidang tambahan dengan menambahkan '|' ke akhir parameter XPath dan menentukan pola untuk mengidentifikasi node.
wget http://<jenkins>/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins
Argumen wrapper diperlukan dalam kasus ini, karena ini mengembalikan lebih dari satu simpul sebagai bagian dari hasil, baik dalam hal itu mencocokkan beberapa bidang dengan XPath dan beberapa plugin plugin.
Mungkin bermanfaat untuk menggunakan URL berikut di browser untuk melihat informasi apa pada plugin yang tersedia dan kemudian memutuskan apa yang ingin Anda batasi menggunakan 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 1,588 (2 nd November 2014) & 1,647 (4 th Februari 2016)
CLI Jenkins mendukung daftar semua plugin yang diinstal:
java -jar jenkins-cli.jar -s http://localhost:8080/ list-plugins
list-plugins
perintah CLI tidak mengharuskan pengguna untuk memiliki izin Keseluruhan / RunScripts seperti yang groovy
dilakukan perintah.
Gunakan Jenkins CLI seperti ini:
java -jar jenkins-cli.jar -s http://[jenkins_server] groovy = < pluginEnumerator.groovy
=
dalam panggilan berarti 'membaca dari input standar' . pluginEnumerator.groovy berisi kode Groovy berikut:
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()}"
Jika Anda ingin bermain dengan kode tersebut, inilah dokumentasi Jenkins Java API .
isActive()
api yang bisa Anda gunakan di skrip groovy dalam jawaban ini untuk mendapatkan status plugin. Lihat javadoc.jenkins-ci.org/hudson/PluginWrapper.html#isActive () .
Jika Anda bekerja di lingkungan buruh pelabuhan dan ingin menampilkan daftar plugin dalam format plugins.txt untuk meneruskannya ke install_scripts.sh gunakan skrip ini di http://{jenkins}/script
konsol:
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:latest")
}
:latest
sampai akhir:println ("${plugin.getShortName()}:latest")
Jawaban di sini agak tidak lengkap. Dan saya harus mengumpulkan informasi dari sumber lain untuk benar-benar mendapatkan daftar plugin.
CLI Jenkins akan memungkinkan kita berinteraksi dengan server Jenkins dari baris perintah. Kita bisa mendapatkannya dengan panggilan ikal sederhana.
curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar
Simpan yang berikut ini sebagai plugins.groovy
.
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}
Panggil server Jenkins (di localhost:8080
sini) dengan nama pengguna dan kata sandi masuk Anda saat merujuk skrip Groovy:
java -jar jenkins-cli.jar -s http://localhost:8080 groovy --username "admin" --password "admin" = < plugins.groovy > plugins.txt
Output ke plugins.txt terlihat seperti ini:
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
Jawaban Behe dengan plugin sortir tidak berfungsi pada mesin Jenkins saya. Saya menerima kesalahan java.lang.UnsupportedOperationException
karena mencoba menyortir koleksi yang tidak dapat diubah yaitu Jenkins.instance.pluginManager.plugins
. Perbaikan sederhana untuk kode:
List<String> jenkinsPlugins = new ArrayList<String>(Jenkins.instance.pluginManager.plugins);
jenkinsPlugins.sort { it.displayName }
.each { plugin ->
println ("${plugin.shortName}:${plugin.version}")
}
Gunakan http://<jenkins-url>/script
URL untuk menjalankan kode.
displayName
saat mencetak shortName
, ini sangat membingungkan karena beberapa plugin tidak secara alfabet sama untuk keduanya, dan itu menghasilkan daftar yang tidak muncul diurutkan. Mengubah it.displayName
untuk it.shortName
menyelesaikan ini dengan baik.
Jika Anda seorang administrator Jenkins, Anda dapat menggunakan halaman informasi sistem Jenkins:
http://<jenkinsurl>/systemInfo
/systeminfo
tidak berfungsi (HTTP 404) di Jenkins 1.594
http://localhost:8080/systemInfo
- beberapa server peka huruf besar-kecil. Perhatikan juga bahwa ini mengharuskan pengguna yang saat ini masuk untuk memiliki izin Keseluruhan / Administer.
Dengan curl
dan jq
:
curl -s <jenkins_url>/pluginManager/api/json?depth=1 \
| jq -r '.plugins[] | "\(.shortName):\(.version)"' \
| sort
Perintah ini memberikan output dalam format yang digunakan oleh plugins.txt
file Jenkins khusus yang memungkinkan Anda untuk pra-instal dependensi (misalnya dalam gambar buruh pelabuhan):
ace-editor:1.1
ant:1.8
apache-httpcomponents-client-4-api:4.5.5-3.0
Contoh a plugins.txt
: https://github.com/hoto/jenkinsfile-examples/blob/master/source/jenkins/usr/share/jenkins/plugins.txt
Dari beranda Jenkins:
Atau
Berbagi opsi lain yang ditemukan di sini dengan kredensial
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
Saya menginginkan solusi yang dapat berjalan pada master tanpa persyaratan auth dan tidak melihatnya di sini. Saya membuat skrip bash cepat yang akan mencabut semua versi dari direktori plugins.
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
Opsi lain untuk pengguna 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)
Saya pikir ini bukan jawaban yang cukup baik ... banyak melibatkan beberapa langkah ekstra di bawah tenda. Begini cara saya melakukannya.
sudo apt-get install jq
... karena output JSON perlu dikonsumsi setelah Anda memanggil 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
Anda juga dapat tertarik dengan pembaruan apa yang tersedia untuk plugin. Untuk itu, Anda harus menggabungkan data tentang plugin yang diinstal dengan informasi tentang pembaruan yang tersedia di sini https://updates.jenkins.io/current/update-center.json .
Untuk mem-parsing file yang diunduh sebagai JSON Anda harus membaca online baris kedua (yang sangat besar).
# 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}")
}
Ada tabel yang mencantumkan semua plugin yang diinstal dan apakah mereka diaktifkan di http: // jenkins / systemInfo
Jika Jenkins dijalankan dalam wadah Docker Jenkins Anda dapat menggunakan baris perintah ini di 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`
Untuk Jenkins versi 2.125 berikut ini berfungsi.
CATATAN: Ganti bagian yang mengatakan USERNAME dan APIKEY dengan UserName dan APIKey yang valid untuk pengguna yang sesuai. Kunci API untuk pengguna tersedia melalui Kelola Pengguna → Pilih Pengguna → opsi Kunci API .
Anda mungkin harus memperpanjang waktu tidur jika instalasi Jenkins Anda membutuhkan waktu lebih lama untuk memulai.
Inisiasi yum update -y
akan memperbarui versi juga jika Anda menginstal Jenkins menggunakan yum juga.
#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
##############
Ada banyak cara untuk mengambil informasi ini tetapi saya menulis dua cara seperti di bawah ini: -
1. Dapatkan jenkins cli.
CLen jenkins akan memungkinkan kita untuk berinteraksi dengan server jenkins kita dari baris perintah. Kita bisa mendapatkannya dengan panggilan ikal sederhana.
curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar
2. Buat skrip asyik. ATAU dari konsol skrip jenkins
Kita perlu membuat skrip groovy untuk mengurai informasi yang kita terima dari API jenkins. Ini akan menampilkan setiap plugin dengan versinya. Simpan yang berikut ini sebagai plugins.groovy.
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}