Kurulu Jenkins eklentilerinin listesini nasıl edinebilirim?
Jenkins Uzaktan Erişim API'sı belgesini aradım, ancak bulunamadı. Jenkins CLI kullanmalı mıyım? Bir belge veya örnek var mı?
Kurulu Jenkins eklentilerinin listesini nasıl edinebilirim?
Jenkins Uzaktan Erişim API'sı belgesini aradım, ancak bulunamadı. Jenkins CLI kullanmalı mıyım? Bir belge veya örnek var mı?
Yanıtlar:
Bilgileri ziyaret ederek erişilebilen Jenkins Komut Dosyası Konsolu'nu kullanarak alabilirsiniz http://<jenkins-url>/script
. (Giriş yaptığınız ve gerekli izinlere sahip olduğunuz göz önüne alındığında).
Yüklü eklentileri yinelemek ve ilgili bilgileri yazdırmak için aşağıdaki Groovy komut dosyasını girin :
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
Sonuç listesini şu şekilde yazdırır (kırpılmış):
Bu çözümler yukarıdaki cevaplardan birine benzer , çünkü Groovy kullanıyor, ancak burada bunun yerine komut dosyası konsolunu kullanıyoruz. Komut dosyası konsolu, Jenkins kullanılırken son derece yararlıdır.
Güncelleme
Sıralı bir listeyi tercih ediyorsanız, bu sort
yöntemi çağırabilirsiniz :
def pluginList = new ArrayList(Jenkins.instance.pluginManager.plugins)
pluginList.sort { it.getShortName() }.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
Kapanış'ı istediğiniz gibi ayarlayın (örneğin, burada shortName tarafından sıralanır, örnekte DisplayName tarafından sıralanır)
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()}" }
Bugünlerde @Behe tarafından açıklanan cevapla aynı yaklaşımı kullanıyorum, bunun yerine https://stackoverflow.com/a/35292719/1597808
API'yı derinlik, XPath ve sarmalayıcı değişkenleriyle birlikte kullanabilirsiniz.
Aşağıda, yüklü tüm eklentileri listelemek için pluginManager'ın API'sini sorgulayacak, ancak yalnızca shortName ve sürüm niteliklerini döndürecek. Elbette '|' ekleyerek ek alanlar alabilirsiniz. XPath parametresinin sonuna kadar ve düğümü tanımlamak için desen belirterek.
wget http://<jenkins>/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins
Bu durumda sarmalayıcı argümanı gereklidir, çünkü sonucun bir parçası olarak birden fazla düğümü döndürür, çünkü hem XPath hem de çoklu eklenti düğümleriyle birden çok alanı eşleştirir.
Eklentiler hakkında hangi bilgilerin mevcut olduğunu görmek ve ardından XPath kullanarak neyi sınırlamak istediğinize karar vermek için tarayıcıda aşağıdaki URL'yi kullanmak muhtemelen yararlıdır:
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 Kasım, 2014) ve 1,647 (4 th Şubat 2016)
Jenkins CLI, yüklü tüm eklentilerin listelenmesini destekler:
java -jar jenkins-cli.jar -s http://localhost:8080/ list-plugins
list-plugins
CLI komutu sahip olmasını gerektirmez Genel / RunScripts izni olarak groovy
komut yok.
Jenkins CLI'yi şu şekilde kullanın:
java -jar jenkins-cli.jar -s http://[jenkins_server] groovy = < pluginEnumerator.groovy
=
çağrıda 'standart girişten oku' anlamına gelir . pluginEnumerator.groovy aşağıdaki Groovy kodunu içerir:
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()}"
Kodla oynamak istiyorsanız, burada Jenkins Java API belgeleri bulunmaktadır .
isActive()
Eklentinin durumunu almak için bu cevapta harika komut dosyasında kullanabileceğiniz bir api var. Bkz. Javadoc.jenkins-ci.org/hudson/PluginWrapper.html#isActive () .
Bir docker ortamında çalışıyorsanız ve install_scripts.sh dosyasına aktarmak için eklenti listesini bir plugins.txt biçiminde çıkarmak istiyorsanız, bu komut dosyalarını http://{jenkins}/script
konsolda kullanın:
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:latest")
}
:latest
ve sonuna eklemek için genişletebilirsiniz :println ("${plugin.getShortName()}:latest")
Buradaki cevaplar biraz eksikti. Eklenti listesini gerçekten elde etmek için diğer kaynaklardan bilgi derlemem gerekti.
Jenkins CLI komut satırından Jenkins sunucumuzla etkileşime girmemize izin verecektir. Basit bir kıvrım çağrısı ile alabiliriz.
curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar
Aşağıdakileri farklı kaydedin plugins.groovy
.
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}
localhost:8080
Groovy komut dosyasına başvururken Jenkins sunucusunu ( burada) oturum açma kullanıcı adınız ve şifrenizle arayın :
java -jar jenkins-cli.jar -s http://localhost:8080 groovy --username "admin" --password "admin" = < plugins.groovy > plugins.txt
Plugins.txt dosyasının çıktısı şuna benzer:
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'nin sıralama eklentilerine verdiği cevap Jenkins makinemde işe yaramadı. java.lang.UnsupportedOperationException
Değişmez bir koleksiyon yani sıralamaya çalışırken hata aldım Jenkins.instance.pluginManager.plugins
. Kod için basit düzeltme:
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
Kodu çalıştırmak için URL'yi kullanın .
displayName
baskı sırasında göre sıralama shortName
, bazı eklentileri her ikisi için de alfabetik olarak aynı değildir ve sıralı görünmüyor bir liste ile sonuçlanır olduğunu fark sadece bir şey. Değişen it.displayName
için it.shortName
bu güzel çözer.
Jenkins yöneticisiyseniz, Jenkins sistem bilgileri sayfasını kullanabilirsiniz:
http://<jenkinsurl>/systemInfo
/systeminfo
Jenkins 1.594
http://localhost:8080/systemInfo
--some sunucular harfe duyarlıdır. Ayrıca, şu anda oturum açmış olan kullanıcının Genel / Yönetici iznine sahip olmasını gerektirdiğini unutmayın.
İle curl
ve jq
:
curl -s <jenkins_url>/pluginManager/api/json?depth=1 \
| jq -r '.plugins[] | "\(.shortName):\(.version)"' \
| sort
Bu komut, çıktıları plugins.txt
bağımlılıkları önceden yüklemenize olanak tanıyan özel Jenkins dosyası tarafından kullanılan bir biçimde verir (örneğin bir docker görüntüsünde):
ace-editor:1.1
ant:1.8
apache-httpcomponents-client-4-api:4.5.5-3.0
Örnek plugins.txt
: https://github.com/hoto/jenkinsfile-examples/blob/master/source/jenkins/usr/share/jenkins/plugins.txt
Jenkins ana sayfasından:
Veya
Burada bulunan başka bir seçeneği kimlik bilgileriyle paylaşma
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
Kimlik doğrulama gerekmeden master üzerinde çalışabilecek bir çözüm istedim ve burada görmedim. Eklentileri dir tüm sürümleri çekecek hızlı bir bash komut dosyası yaptım.
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 kullanıcıları için başka bir seçenek:
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)
Bence bunlar yeterince iyi cevaplar değil ... birçoğu birkaç ekstra başlık altında. İşte böyle yaptım.
sudo apt-get install jq
... API'yı çağırdıktan sonra JSON çıktısının tüketilmesi gerekiyor.
#!/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
Eklentiler için hangi güncellemelerin mevcut olduğu da ilginizi çekebilir. Bunun için, yüklü eklentiler hakkındaki verileri burada bulunan güncellemelerle ilgili bilgilerle birleştirmeniz gerekir https://updates.jenkins.io/current/update-center.json .
İndirilen dosyayı bir JSON olarak ayrıştırmak için ikinci satırı (büyük) çevrimiçi okumalısınız.
# 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}")
}
Yüklü tüm eklentileri ve bunların http: // jenkins / systemInfo'da etkinleştirilip etkinleştirilmediğini listeleyen bir tablo vardır.
Jenkins bir Jenkins Docker kapsayıcısında çalışıyorsa, Bash'te şu komut satırını kullanabilirsiniz:
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`
Jenkins sürüm 2.125 için aşağıdakiler işe yaradı.
NOT: USERNAME ve APIKEY yazan bölümleri, ilgili kullanıcı için geçerli bir UserName ve APIKey ile değiştirin. Bir kullanıcı için API anahtarı Kullanıcıları Yönet → Kullanıcı Seç → API Anahtarı seçeneği ile kullanılabilir.
Jenkins kurulumunuzun başlaması daha uzun sürerse uykuyu uzatmanız gerekebilir.
yum update -y
Jenkins'i yum kullanarak yüklediyseniz, başlatma da sürümü yükseltir.
#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
##############
Bu bilgileri almak için birçok yol var ama aşağıdaki gibi iki yol yazıyorum: -
1. Jenkins cli alın.
Jenkins CLI, komut satırından jenkins sunucumuzla etkileşime girmemize izin verecektir. Basit bir kıvrım çağrısı ile alabiliriz.
curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar
2. Mükemmel bir komut dosyası oluşturun. VEYA jenkins kod konsolundan
Jenkins API'sından aldığımız bilgileri ayrıştırmak için harika bir komut dosyası oluşturmamız gerekiyor. Bu, her eklentinin sürümü ile birlikte çıkacaktır. Aşağıdakileri plugins.groovy olarak kaydedin.
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}