So erhalten Sie eine Liste der installierten Jenkins-Plugins mit Name und Versionspaar

159

Wie kann ich eine Liste der installierten Jenkins-Plugins erhalten?

Ich habe das Jenkins Remote Access API-Dokument durchsucht, aber es wurde nicht gefunden. Soll ich Jenkins 'CLI verwenden? Gibt es ein Dokument oder ein Beispiel?

user1284795
quelle

Antworten:

160

Sie können die Informationen über die Jenkins Script Console abrufen, auf die Sie unter zugreifen können http://<jenkins-url>/script. (Vorausgesetzt, Sie sind angemeldet und verfügen über die erforderlichen Berechtigungen).

Screenshot der Skriptkonsole

Geben Sie das folgende Groovy-Skript ein , um die installierten Plugins zu durchlaufen und die relevanten Informationen auszudrucken:

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

Die Ergebnisliste wird wie folgt gedruckt (abgeschnitten):

SScreenshot der Skriptausgabe

Diese Lösung ähnelt einer der obigen Antworten , da sie Groovy verwendet, aber hier verwenden wir stattdessen die Skriptkonsole. Die Skriptkonsole ist äußerst hilfreich bei der Verwendung von Jenkins.

Aktualisieren

Wenn Sie eine sortierte Liste bevorzugen, können Sie diese sortMethode aufrufen :

def pluginList = new ArrayList(Jenkins.instance.pluginManager.plugins)
pluginList.sort { it.getShortName() }.each{
  plugin -> 
    println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}

Passen Sie den Abschluss nach Ihren Wünschen an (z. B. wird er hier nach dem Kurznamen sortiert, im Beispiel nach dem Anzeigenamen).

Behe
quelle
2
Von allen Antworten ist dies die nützlichste, um einen Plugin-Fehlerbericht einzureichen. Dies kann über die Standard-Web-Benutzeroberfläche erfolgen und liefert das Ergebnis in einem Format, das einfach in das Feld "Umgebung" eingefügt werden kann.
Aaron D. Marasco
8
Tolle Antwort für die schnelle Erstellung einer plugins.txt für Docker Jenkins!
Erik Englund
1
Es kann nützlich sein, eine Sortierung hinzuzufügen, damit die Liste der Plugins konsistent ist: Jenkins.instance.pluginManager.plugins.sort({it.getDisplayName()}).each{ plugin -> println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}") }
wheleph
1
Dies ist die Antwort, zu der wir anstelle meines obigen XPath-Vorschlags lokal gewechselt haben. Wir verwenden diesen Ansatz, um die plugins.txt für unser Docker-Image zu generieren, wie oben von @ErikEnglund erwähnt 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
Die Sortierung funktioniert nicht, es ist heutzutage eine nicht veränderbare Karte. Verwenden Sie:jenkins.model.Jenkins.instance.getPluginManager().getPlugins().stream().sorted().each { println "${it.getShortName()} | ${it.getVersion()} | ${it.getDisplayName()}" }
Ed Randall
96

Heutzutage verwende ich den gleichen Ansatz wie die von @Behe unten beschriebene Antwort anstelle von https://stackoverflow.com/a/35292719/1597808


Sie können die API in Kombination mit Tiefen-, XPath- und Wrapper-Argumenten verwenden.

Im Folgenden wird die API des pluginManager abgefragt, um alle installierten Plugins aufzulisten, jedoch nur, um deren Kurznamen- und Versionsattribute zurückzugeben. Sie können natürlich zusätzliche Felder abrufen, indem Sie '|' hinzufügen. bis zum Ende des XPath-Parameters und Angabe des Musters zur Identifizierung des Knotens.

wget http://<jenkins>/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins

Das Wrapper-Argument ist in diesem Fall erforderlich, da es als Teil des Ergebnisses mehr als einen Knoten zurückgibt, da mehrere Felder mit dem XPath- und mehreren Plugin-Knoten abgeglichen werden.

Es ist wahrscheinlich nützlich, die folgende URL in einem Browser zu verwenden, um zu sehen, welche Informationen zu den Plugins verfügbar sind, und dann zu entscheiden, was Sie mit XPath einschränken möchten:

http://<jenkins>/pluginManager/api/xml?depth=1
dbailey
quelle
Hallo, wissen Sie, wie Sie die Liste der Plugins erhalten, die tatsächlich von Jenkins Jobs und Jenkins-System verwendet werden, anstatt die vollständige Liste der installierten Plugins? Danke
user1164061
3
Funktionierte gut für mich unter Mac OS X. Ich wollte die Ausgabe in eine Nur-Text-Liste konvertieren, also benutzte ich Perl-Regex, um die Tags zu entfernen: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
Alternative im JSON-Format:curl -s -k "http://jenkins/pluginManager/api/json?depth=1" | jq '.plugins[]|{shortName, version,longName}' -c
MarkHu
1
Ich glaube, dass dies Administratorrechte erfordert, bin mir aber nicht sicher.
mkobit
2
Bestätigt, dass dies Administratorrechte gemäß der Sicherheitsempfehlung vom 11.05.2016 erfordert .
Mkobit
28

Jenkins 1,588 (2 nd November 2014) und 1.647 (4 th Februar 2016)

  • Jenkins> Jenkins verwalten

    Geben Sie hier die Bildbeschreibung ein

  • System Information

    Geben Sie hier die Bildbeschreibung ein

  • Plugins

    Geben Sie hier die Bildbeschreibung ein

ROMANIA_engineer
quelle
1
Dies ist sehr einfach, und ich kann die Liste vom DEV- und PRD-Server abrufen, in Excel einfügen und ihre Versionen nebeneinander vergleichen.
Jirong Hu
24

Die Jenkins-CLI unterstützt das Auflisten aller installierten Plugins:

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

wmli
quelle
Dadurch wird der Status des Plugins nicht aufgelistet.
Akhan
1
Für den list-pluginsCLI-Befehl muss der Benutzer nicht wie der Befehl über die Berechtigung Overall / RunScripts verfügen groovy.
José Andias
Dies scheint mit einem API-Token nicht zu funktionieren, wenn der Benutzer / das Token nicht "Gesamt / Administrator" ist.
Cgseller
21

Verwenden Sie Jenkins CLI wie folgt:

java -jar jenkins-cli.jar -s http://[jenkins_server] groovy = < pluginEnumerator.groovy

=im Aufruf bedeutet "von Standardeingabe lesen" .pluginEnumerator.groovy enthält den folgenden Groovy-Code:

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

Wenn Sie mit dem Code spielen möchten, finden Sie hier die Dokumentation zur Jenkins Java-API .

malenkiy_scot
quelle
@ user1284795, war das hilfreich?
malenkiy_scot
1
Hallo, wissen Sie, wie Sie die vom Jenkins-System und Jenkins-Job verwendeten Plugins erhalten, anstatt alle Plugins zu installieren? Ich möchte, dass dies mir hilft, alle nicht verwendeten Plugins zu deinstallieren. Jede Hilfe wird geschätzt. Vielen Dank!
user1164061
Dies sollte die akzeptierte Antwort sein. @ user1164061, ich glaube nicht, dass es einen Unterschied zwischen Plugins gibt, die für einen Job sichtbar sind, und für den Server. Es gibt eine isActive()API, die Sie im groovigen Skript in dieser Antwort verwenden können, um den Status des Plugins abzurufen. Siehe javadoc.jenkins-ci.org/hudson/PluginWrapper.html#isActive () .
Akhan
20

Wenn Sie in einer Docker-Umgebung arbeiten und die Plugin-Liste in einem plugins.txt-Format ausgeben möchten, um diese an install_scripts.sh zu übergeben, verwenden Sie diese Skripte in der http://{jenkins}/scriptKonsole:

  1. Diese Version ist nützlich, um eine bestimmte Paketversion zu erhalten
Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
  1. Wenn Sie nur das Plugin mit der neuesten Version möchten, können Sie dies verwenden (danke @KymikoLoco für den Tipp)
Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getShortName()}:latest")
}
Alessandro Lucarini
quelle
1
Wenn Sie die neuesten Versionen aller Plugins erhalten möchten, können Sie diese erweitern, um nur den Kurznamen zu erhalten und :latestam Ende hinzuzufügen :println ("${plugin.getShortName()}:latest")
KymikoLoco
17

Die Antworten hier waren etwas unvollständig. Und ich musste Informationen aus anderen Quellen zusammenstellen, um die Plugin-Liste tatsächlich zu erhalten.

1. Holen Sie sich die Jenkins CLI

Über die Jenkins-CLI können wir über die Befehlszeile mit unserem Jenkins-Server interagieren. Wir können es mit einem einfachen Curl Call bekommen.

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

2. Erstellen Sie ein Groovy-Skript zum Parsen (dank malenkiy_scot).

Speichern Sie Folgendes als plugins.groovy.

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

3. Rufen Sie die Jenkins-API auf, um Plugin-Ergebnisse zu erhalten

Rufen Sie den Jenkins-Server an (localhost:8080 hier) mit Ihrem Login-Benutzernamen und Passwort an, während Sie auf das Groovy-Skript verweisen:

java -jar jenkins-cli.jar -s http://localhost:8080 groovy --username "admin" --password "admin" = < plugins.groovy > plugins.txt

Die Ausgabe in plugins.txt sieht folgendermaßen aus:

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
noqcks
quelle
Die obigen Befehle sollten auf Ihrer Workstation und nicht auf einem Jenkins-Job ausgeführt werden
user3740244
Der Befehl scheint in den neuesten Versionen zu "FEHLER: Anonym fehlt die Berechtigung" Allgemein / Lesen "" zu führen. Stattdessen wird die Authentifizierung übergeben, bevor sie für mich funktioniert hat. Java -jar jenkins-cli.jar -s localhost: 8080 -auth "admin: < Passwort> "groovy = <plugins.groovy
prasanna
12

Behes Antwort mit Sortier-Plugins funktionierte auf meinem Jenkins-Computer nicht. Ich habe den Fehler erhalten, java.lang.UnsupportedOperationExceptionweil ich versucht habe, eine unveränderliche Sammlung zu sortieren, d Jenkins.instance.pluginManager.plugins. H. Einfache Korrektur für den Code:

List<String> jenkinsPlugins = new ArrayList<String>(Jenkins.instance.pluginManager.plugins);
jenkinsPlugins.sort { it.displayName }
              .each { plugin ->
                   println ("${plugin.shortName}:${plugin.version}")
              }

Verwenden Sie die http://<jenkins-url>/scriptURL, um den Code auszuführen.

Alesso
quelle
1
Ich bin auch mit einer anderen Version von Jenkins darauf gestoßen als mit dem ersten System, auf dem ich es getestet habe. Für v2.81 funktionierte die Top-Antwort, aber für LTS v2.83.x und alle neueren Versionen gab es den Fehler, den Sie erwähnt haben, während Ihr Code noch funktionierte.
Dragon788
1
Eine Sache, die mir gerade aufgefallen ist, ist, dass Sie displayNamebeim Ausdrucken nach sortieren. shortNameDies war sehr verwirrend, da einige Plugins für beide nicht alphabetisch gleich sind und eine Liste angezeigt wird, die nicht sortiert erscheint. Ändern, it.displayNameum it.shortNamedies schön zu lösen.
Dragon788
8

Wenn Sie ein Jenkins-Administrator sind, können Sie die Jenkins-Systeminformationsseite verwenden:

http://<jenkinsurl>/systemInfo
Andy G.
quelle
/systeminfofunktioniert nicht (HTTP 404) auf Jenkins 1.594
G. Lombard
7
Versuchen Sie - bei http://localhost:8080/systemInfoeinigen Servern wird zwischen Groß- und Kleinschreibung unterschieden. Beachten Sie auch, dass der aktuell angemeldete Benutzer über die Berechtigung "Gesamt / Verwalten" verfügen muss.
MarkHu
8

Mit curlund jq:

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

Dieser Befehl gibt eine Ausgabe in einem Format aus, das von einer speziellen Jenkins- plugins.txtDatei verwendet wird, mit der Sie Abhängigkeiten vorinstallieren können (z. B. in einem Docker-Image):

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

Beispiel für plugins.txt: https://github.com/hoto/jenkinsfile-examples/blob/master/source/jenkins/usr/share/jenkins/plugins.txt

Andrzej Rehmann
quelle
5

Von der Jenkins-Homepage:

  1. Klicken Sie auf Jenkins verwalten .
  2. Klicken Sie auf Plugins verwalten .
  3. Klicken Sie auf die Registerkarte Installiert .

Oder

  1. Gehen Sie direkt zur Jenkins-URL: {Ihre Jenkins-Basis-URL} / pluginManager / installiert
James Lawruk
quelle
1
Die Seite "Installierte Plugins" gibt nicht unbedingt den tatsächlichen Plugin-Status wieder. Sie können beispielsweise ein Plugin wieder aktivieren und das Plugin überprüfen lassen, während das Plugin bis zum Jenkins-Restart noch deaktiviert ist. Daher sind die einzigen 100% igen Lösungen http: // <jenkinsurl> / systeminfo und die API-Abfrageantworten, imho.
t0r0X
4

Teilen Sie eine andere hier gefundene Option mit Anmeldeinformationen

JENKINS_HOST=username:[email protected]: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/ /:/'
vishnu
quelle
wie oben, jedoch ohne die Versionen und sortiert. 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

Ich wollte eine Lösung, die auf dem Master ohne Authentifizierungsanforderungen ausgeführt werden kann, und habe sie hier nicht gesehen. Ich habe ein schnelles Bash-Skript erstellt, das alle Versionen aus dem Plugins-Verzeichnis herausholt.

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
Kevin Brotcke
quelle
grep Plugin-Version */META-INF/MANIFEST.MF | sed -e 's!/META-INF/MANIFEST.MF:Plugin-Version: !:!g' > ../plugins2.txt
James Dupont
2

Ich denke, diese Antworten sind nicht gut genug ... viele beinhalten ein paar zusätzliche Schritte unter der Haube. So habe ich es gemacht.

sudo apt-get install jq

... weil die JSON-Ausgabe nach dem Aufruf der API verbraucht werden muss.

#!/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
hhony
quelle
1

Eine weitere Option für Python-Benutzer:

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)
Tidhar Klein Orbach
quelle
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}")
    }
Brian
quelle
0

Wenn Jenkins in einem Jenkins Docker-Container ausgeführt wird, können Sie diese Befehlszeile in Bash verwenden:

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`
Huluvu424242
quelle
0

Für Jenkins Version 2.125 funktionierte Folgendes.

HINWEIS: Ersetzen Sie Abschnitte mit den Angaben USERNAME und APIKEY durch einen gültigen Benutzernamen und APIKey für den entsprechenden Benutzer. Der API-Schlüssel für einen Benutzer ist über Benutzer verwaltenBenutzer auswählenAPI-Schlüssel verfügbar Option .

Möglicherweise müssen Sie den Ruhezustand verlängern, wenn der Start Ihrer Jenkins-Installation länger dauert.

Durch die Initiierung yum update -ywird auch die Version aktualisiert, wenn Sie Jenkins ebenfalls mit yum installiert haben.

#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
##############
gdd1984
quelle
0

Es gibt viele Möglichkeiten, diese Informationen abzurufen, aber ich schreibe zwei Möglichkeiten wie folgt: -

1. Holen Sie sich die Jenkins Cli.

Über die Jenkins-CLI können wir über die Befehlszeile mit unserem Jenkins-Server interagieren. Wir können es mit einem einfachen Curl Call bekommen.

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

2. Erstellen Sie ein grooviges Skript. ODER von Jenkins Skriptkonsole

Wir müssen ein grooviges Skript erstellen, um die Informationen zu analysieren, die wir von der Jenkins-API erhalten. Dadurch wird jedes Plugin mit seiner Version ausgegeben. Speichern Sie Folgendes als plugins.groovy.

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

user128364
quelle
0

Sie können auch interessiert sein, welche Updates für Plugins verfügbar sind. Dazu müssen Sie die Daten zu installierten Plugins mit Informationen zu Updates zusammenführen, die hier verfügbar sind: https://updates.jenkins.io/current/update-center.json .

Um die heruntergeladene Datei als JSON zu analysieren, müssen Sie die zweite Zeile (die riesig ist) online lesen.

Wojciech Sciesinski
quelle