Ad ve sürüm çiftiyle kurulu Jenkins eklentilerinin listesi nasıl alınır


160

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:


161

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).

Komut Dosyası Konsolu'nun ekran görüntüsü

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ış):

Script çıktısının ekran görüntüsü

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 sortyö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)


2
Tüm cevaplar arasında, bu bir eklenti hata raporu dosyalamak için en yararlıdır; standart web kullanıcı arayüzü kullanılarak yapılabilir ve sonucu "Ortam" alanına kolayca yapıştırılabilecek bir biçimde verir.
Aaron D.Marasco

8
Docker Jenkins için hızlıca bir plugins.txt oluşturmak için harika bir cevap!
Erik Englund

1
Eklentiler listesinin tutarlı olması için sıralama eklemek yararlı olabilir: Jenkins.instance.pluginManager.plugins.sort({it.getDisplayName()}).each{ plugin -> println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}") }
wheleph

1
Bu, yukarıdaki XPath önerim yerine yerel olarak değiştirdiğimiz, bir kıvrılma isteği ve bazı kaynak eklentilerinden oluşan budama ile yanıtladığımız yanıt, yukarıdaki @ErikEnglund tarafından belirtildiği gibi docker görüntümüz için plugins.txt dosyasını oluşturmak için kullanıyoruz. 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
Sıralama çalışmıyor, bu gün değiştirilemez bir harita. Kullanım:jenkins.model.Jenkins.instance.getPluginManager().getPlugins().stream().sorted().each { println "${it.getShortName()} | ${it.getVersion()} | ${it.getDisplayName()}" }
Ed Randall

96

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

Merhaba, Kurulu eklentilerin tam listesi yerine Jenkins işleri ve Jenkins sistemi tarafından kullanılan eklentilerin listesini nasıl elde edebileceğinizi biliyor musunuz? Teşekkürler
user1164061

3
Mac OS X'te benim için iyi çalıştı. Çıktıyı düz bir metin listesine dönüştürmek istedim, bu yüzden etiketleri çıkarmak için bazı Perl regex'i kullandım: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. Lombard

8
JSON biçiminde alternatif:curl -s -k "http://jenkins/pluginManager/api/json?depth=1" | jq '.plugins[]|{shortName, version,longName}' -c
MarkHu

1
Bunun yönetim ayrıcalıkları gerektirdiğine inanıyorum, ama emin değilim.
mkobit

2
Bunun 2016-05-11 güvenlik danışma belgesine göre yönetici ayrıcalıkları gerektirdiğini doğruladı .
mkobit

29

Jenkins 1,588 (2 nd Kasım, 2014) ve 1,647 (4 th Şubat 2016)

  • Jenkins> Jenkins'i Yönetin

    resim açıklamasını buraya girin

  • Sistem bilgisi

    resim açıklamasını buraya girin

  • eklentiler

    resim açıklamasını buraya girin


1
Bu çok basit ve DEV ve PRD sunucusundan listeyi alabilir, Excel'e yapıştırabilir ve sürümlerini yan yana karşılaştırabilirim.
Jirong Hu

24

Jenkins CLI, yüklü tüm eklentilerin listelenmesini destekler:

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


Bu, eklentinin durumunu listelemez.
akhan

1
Ve list-pluginsCLI komutu sahip olmasını gerektirmez Genel / RunScripts izni olarak groovykomut yok.
José Andias

Kullanıcı / belirteci "Genel / Yönetici" değilse, bu bir API belirteciyle birlikte çalışmaz.
cgseller

21

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 .


@ user1284795, bu yardımcı oldu mu?
malenkiy_scot

1
Merhaba, tüm eklentileri yüklemek yerine Jenkins sistemi ve Jenkins işi tarafından kullanılan eklentileri nasıl alacağınızı biliyor musunuz? Kullanılmayan tüm eklentileri kaldırmama yardımcı olmak için bunu istiyorum. Herhangi bir yardım takdir. Teşekkürler!
user1164061

Bu kabul edilen cevap olmalı. @ user1164061, bir işe veya sunucuya görünür eklentiler arasında herhangi bir fark olduğunu düşünmüyorum. 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 () .
akhan

20

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}/scriptkonsolda kullanın:

  1. Bu sürüm, belirli paket sürümünü almak için kullanışlıdır
Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
  1. Eklentiyi yalnızca en son sürüme sahip olmak istiyorsanız bunu kullanabilirsiniz (ipucu için @KymikoLoco teşekkürler)
Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getShortName()}:latest")
}

1
Tüm eklentilerin en son sürümlerini almak istiyorsanız, bunu sadece kısa adı almak :latestve sonuna eklemek için genişletebilirsiniz :println ("${plugin.getShortName()}:latest")
KymikoLoco

17

Buradaki cevaplar biraz eksikti. Eklenti listesini gerçekten elde etmek için diğer kaynaklardan bilgi derlemem gerekti.

1. Jenkins CLI'sını edinin

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. Ayrıştırma için Groovy komut dosyası oluşturun (malenkiy_scot sayesinde)

Aşağıdakileri farklı kaydedin plugins.groovy.

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

3. Eklenti sonuçları için Jenkins API'sını arayın

localhost:8080Groovy 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

Yukarıdaki komutlar bir Jenkins işinde değil, iş istasyonunuzda çalışmalıdır
user3740244

Komut en son sürümlerde "HATA: anonim Genel / Okuma izni eksik" ile sonuçlanıyor gibi .. bunun yerine benim için çalıştı önce auth geçen java -jar jenkins-cli.jar -s localhost: 8080 -auth "admin: < şifre> "groovy = <plugins.groovy
prasanna

12

Behe'nin sıralama eklentilerine verdiği cevap Jenkins makinemde işe yaramadı. java.lang.UnsupportedOperationExceptionDeğ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>/scriptKodu çalıştırmak için URL'yi kullanın .


1
Ben de bunu test ettiğim ilk sistemden farklı bir Jenkins sürümünü kullanarak karşılaştım. V2.81 için en iyi yanıt işe yaradı, ancak LTS v2.83.x ve daha yeni sürümler için kodunuz hala çalışırken bahsettiğiniz hatayı verdi.
dragon788

1
Ben fark sadece bir şey displayNamebaskı 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.displayNameiçin it.shortNamebu güzel çözer.
dragon788

8

Jenkins yöneticisiyseniz, Jenkins sistem bilgileri sayfasını kullanabilirsiniz:

http://<jenkinsurl>/systemInfo

/systeminfoJenkins 1.594
G'de

7
Deneyin 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.
MarkHu

8

İle curlve jq:

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

Bu komut, çıktıları plugins.txtbağı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


5

Jenkins ana sayfasından:

  1. Jenkins'i Yönet'i tıklayın .
  2. Eklentileri Yönet'i tıklayın .
  3. Tıklayın Yüklü sekmesine.

Veya

  1. Doğrudan Jenkins URL'sine gidin: {Jenkins temel URL'niz} / pluginManager / yüklü

1
"Yüklü eklentiler" sayfası gerçek eklenti durumunu yansıtmayabilir. Örneğin, bir eklentiyi yeniden etkinleştirebilir ve eklentinin Jenkins-Restart'a kadar devre dışı bırakılmışken eklentinin işaretlendiğini görebilirsiniz. Bu nedenle, sadece% 100 çözümler http: // <jenkinsurl> / systeminfo ve API sorgu cevapları, imho.
t0r0X

4

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/ /:/'

yukarıdaki gibi, ancak sürümleri olmadan ve sıralanmış. 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

3

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
james dupont

2

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)

2

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

1

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.


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

0

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önetKullanıcı SeçAPI Anahtarı seçeneği ile kullanılabilir.

Jenkins kurulumunuzun başlaması daha uzun sürerse uykuyu uzatmanız gerekebilir.

yum update -yJenkins'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
##############

0

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.