Як отримати список встановлених плагінів Jenkins з парою імен та версій


159

Як я можу отримати список встановлених плагінів Jenkins?

Я шукав документ API віддаленого доступу Jenkins, але його не було знайдено. Чи варто використовувати CLI Дженкінса? Чи є документ чи приклад?

Відповіді:


161

Ви можете отримати інформацію за допомогою консолі сценарію Дженкінса, до якої можна відвідати, відвідавши сторінку http://<jenkins-url>/script. (Враховуючи, що ви ввійшли в систему та маєте необхідні дозволи).

Знімок екрана консолі сценарію

Введіть наступний сценарій Groovy, щоб перебрати встановлені плагіни та роздрукувати відповідну інформацію:

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

Він буде друкувати список результатів таким чином (відрізаний):

SScreenshot виводу сценарію

Це рішення схоже на один із наведених вище відповідей тим, що він використовує Groovy, але тут ми використовуємо консоль сценарію. Консоль сценарію надзвичайно корисна при використанні Дженкінса.

Оновлення

Якщо ви віддаєте перевагу відсортованому списку, ви можете зателефонувати за цим sortметодом :

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

Налаштуйте закриття на свій смак (наприклад, тут воно відсортовано за коротким іменем, у прикладі відсортовано за DisplayName)


2
З усіх відповідей це найкорисніше для подання звіту про помилки плагінів; це можна зробити за допомогою стандартного веб-інтерфейсу і дає результат у форматі, який можна легко вставити у поле "Середовище".
Аарон Д. Мараско

8
Чудова відповідь за швидке створення плагінів.txt для докера Дженкінса!
Ерік Енглунд

1
Буде корисно додати сортування, щоб список плагінів був узгодженим: Jenkins.instance.pluginManager.plugins.sort({it.getDisplayName()}).each{ plugin -> println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}") }
wheleph

1
Це відповідь, яку ми переключили локально замість моєї пропозиції XPath, описаної вище, обгорнувши запит на згортання та обрізку вбудованих із вихідних плагінів, ми використовуємо цей підхід для створення plugins.txt для нашого зображення докера, як згадував @ErikEnglund вище 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
Цей вид не працює, це неможливо змінити карту в наші дні. Використання:jenkins.model.Jenkins.instance.getPluginManager().getPlugins().stream().sorted().each { println "${it.getShortName()} | ${it.getVersion()} | ${it.getDisplayName()}" }
Ед Рандалл

96

У ці дні я використовую той самий підхід, що і відповідь, описану нижче @Behe замість https://stackoverflow.com/a/35292719/1597808


Ви можете використовувати API у поєднанні з аргументами глибини, XPath та обгортки.

Далі буде запитуватися API API pluginManager, щоб перелічити всі встановлені плагіни, але лише повернути їх атрибути shortName та версії. Звичайно, ви можете отримати додаткові поля, додавши "|" до кінця параметра XPath та вказуючи шаблон для ідентифікації вузла.

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

Аргумент обгортки потрібен у цьому випадку, оскільки він повертає більше ніж один вузол як частину результату, як у тому, що він відповідає декільком полям з XPath, так і декількома вузлами плагінів.

Напевно, корисно використовувати наступну URL-адресу в браузері, щоб побачити, яка інформація про плагіни доступна, а потім вирішити, що потрібно обмежити за допомогою XPath:

http://<jenkins>/pluginManager/api/xml?depth=1

Привіт, Ви знаєте, як отримати список плагінів, які фактично використовуються роботами Дженкінса та системою Дженкінса, а не повним списком встановлених плагінів? Дякую
користувач1164061

3
Добре працював для мене на Mac OS X. Я хотів перетворити вихід у звичайний текстовий список, тому використав деякий вираз Perl для викреслення тегів: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'
Г. Ломбард

8
Альтернатива у форматі JSON:curl -s -k "http://jenkins/pluginManager/api/json?depth=1" | jq '.plugins[]|{shortName, version,longName}' -c
MarkHu

1
Я вважаю, що для цього потрібні адміністративні пільги, але я не впевнений.
mkobit

2
Підтверджено, що для цього потрібні права адміністратора відповідно до рекомендацій щодо безпеки 2016-05-11 .
mkobit

29

Дженкінс 1,588 (2 - е листопада 2014 г.) і 1,647 (4 - е лютого, 2016)

  • Дженкінс> Керуйте Дженкінсом

    введіть тут опис зображення

  • Інформація про систему

    введіть тут опис зображення

  • Плагіни

    введіть тут опис зображення


1
Це дуже просто, і я можу отримати список від сервера DEV і PRD, вставити їх в Excel і порівняти їх версії поряд.
Jirong Hu

24

CLI Jenkins підтримує перелік усіх встановлених плагінів:

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


У цьому плані не відображатиметься стан плагіна.
ахан

1
І команда list-pluginsCLI не вимагає від користувача дозволу Загальні / Виконати сценарії, як groovyце робить команда.
Хосе Андіас

Схоже, це не працює з маркером API, якщо користувач / маркер не є "Загалом / Адміністратор".
cgseller

21

Використовуйте 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()}"

Якщо ви хочете пограти з кодом, ось документація Java API API Дженкінса .


@ user1284795, це було корисно?
malenkiy_scot

1
Привіт, чи знаєте ви, як отримати плагіни, використовувані системою Дженкінса та завданням Дженкінса, замість того, щоб установити всі плагіни? Я хотів би, щоб це допомогло мені видалити всі невикористані плагіни. Будь-яка допомога вдячна. Дякую!
користувач1164061

Це має бути прийнятою відповіддю. @ user1164061, я не думаю, що існує різниця між плагінами, видимими роботою проти сервера. Існує isActive()api, яку ви можете використовувати в groovy-скрипті в цій відповіді, щоб отримати стан плагіна. Дивіться javadoc.jenkins-ci.org/hudson/PluginWrapper.html#isActive () .
ахан

20

Якщо ви працюєте в середовищі докера і хочете вивести список плагінів у форматі plugins.txt, щоб передати його в install_scripts.sh, використовуйте ці скрипти в http://{jenkins}/scriptконсолі:

  1. Ця версія корисна для отримання конкретної версії пакета
Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
  1. Якщо ви хочете лише плагін із останньою версією, ви можете скористатися цим (дякую @KymikoLoco за пораду)
Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getShortName()}:latest")
}

1
Якщо ви хочете отримати найновіші версії всіх плагінів, можете продовжити це, щоб отримати лише коротке ім’я та додати :latestдо кінця:println ("${plugin.getShortName()}:latest")
KymikoLoco

17

Відповіді тут були дещо неповними. І мені довелося збирати інформацію з інших джерел, щоб фактично придбати список плагінів.

1. Отримайте CLI Дженкінса

CLI Jenkins дозволить нам взаємодіяти з нашим сервером Jenkins з командного рядка. Ми можемо отримати це за допомогою простого дзвінка з завитками.

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

2. Створіть сценарій Groovy для розбору (завдяки malenkiy_scot)

Збережіть наступне як plugins.groovy.

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

3. Зателефонуйте до API Дженкінса, щоб отримати результати плагінів

Телефонуйте на сервер Дженкінса ( localhost:8080тут), використовуючи своє ім’я користувача та пароль для входу, посилаючись на сценарій Groovy:

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

Вищезазначені команди повинні працювати на вашій робочій станції, а не на роботі Дженкінса
user3740244

Команда, здається, призводить до "ПОМИЛИ: анонімному не вистачає загального / дозволу читання" в останніх версіях .. замість того, щоб передавати auth до того, як працював для мене java -jar jenkins-cli.jar -s localhost: 8080 -auth "адміністратор: < пароль> "groovy = <plugins.groovy
prasanna

12

Відповідь Бехе з сортуванням плагінів не працювала на моїй машині Дженкінса. Я отримав помилку 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>/scriptURL для запуску коду.


1
Я також наткнувся на це, використовуючи іншу версію Дженкінса, ніж перша система, на якій я її тестував. Для версії v2.81 найкраща відповідь спрацювала, але для LTS v2.83.x та будь-яких нових версій вона дала помилку, яку ви згадали, поки ваш код все ще працював.
dragon788

1
Я лише зауважив, що ви сортуєте на основі displayNameдруку shortName, це було дуже заплутано, оскільки деякі плагіни не в алфавіті однакові для обох, і це призводить до списку, який не видається відсортованим. Зміна it.displayNameдо it.shortNameВирішує це красиво.
dragon788

8

Якщо ви адміністратор Дженкінса, ви можете скористатися інформаційною сторінкою системи Дженкінса:

http://<jenkinsurl>/systemInfo

/systeminfoне працює (HTTP 404) на Jenkins 1.594
G. Lombard

7
Спробуйте - http://localhost:8080/systemInfoдеякі сервери залежать від регістру. Зауважте також, що для цього потрібен поточний користувач, який повинен мати загальний / адміністративний дозвіл.
MarkHu

8

З curlі jq:

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

Ця команда дає вихід у форматі, використовуваному спеціальним plugins.txtфайлом Дженкінса, який дозволяє попередньо встановити залежності (наприклад, у зображенні докера):

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


5

З домашньої сторінки Дженкінса:

  1. Натисніть Управління Дженкінс .
  2. Клацніть Управління плагінами .
  3. Перейдіть на вкладку « Встановлені ».

Або

  1. Перейдіть безпосередньо до URL-адреси Дженкінса: {Базова URL-адреса Дженкінса} / pluginManager / встановлено

1
Сторінка "встановлені плагіни" не обов'язково відображає реальний статус плагіна. Наприклад, ви можете повторно увімкнути плагін і побачити, що плагін перевіряється, тоді як плагін все ще вимкнено до перегляду Дженкінса. Тому єдиними 100% рішеннями є http: // <jenkinsurl> / systeminfo та відповіді на запит API, imho.
t0r0X

4

Ділитися іншим варіантом, знайденим тут, за допомогою облікових даних

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
ffghfgh

3

Я хотів рішення, яке може працювати на master без будь-яких вимог до автентичності, і тут його не бачили. Я зробив швидкий скрипт bash, який витягне всі версії з плагіну dir.

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
Джеймс Дюпон

2

Я думаю, що це недостатньо хороші відповіді (відповіді) ... багато хто передбачає пару додаткових кроків під кришкою. Ось як я це зробив.

sudo apt-get install jq

... тому що вихід JSON потребує споживання після виклику 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

1

Ще один варіант для користувачів 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)

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 працює в контейнері Jenkins Docker, ви можете використовувати цей командний рядок у 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`

0

Для версії 2.125 Дженкінса працювало наступне.

ПРИМІТКА. Замініть розділи, на яких написано USERNAME та APIKEY, на дійсні UserName та APIKey для відповідного користувача. Ключ API для користувача доступний через Керування користувачамиВиберіть користувачаКлюч API Параметр .

Можливо, вам доведеться продовжити час сну, якщо ваш інсталяція Дженкінса запустить більше часу.

Ініціація yum update -yтакож оновить версію, якщо ви встановили Дженкінс також з використанням yum.

#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

Є багато способів отримати цю інформацію, але я пишу два способи, як показано нижче: -

1. Дістаньте клінку джинкінів.

CLI-jenkins дозволить нам взаємодіяти з нашим сервером jenkins з командного рядка. Ми можемо отримати це за допомогою простого дзвінка з завитками.

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

2. Створіть гровий сценарій. АБО з консолі скриптів jenkins

Нам потрібно створити ритм-скрипт, щоб проаналізувати інформацію, яку ми отримуємо від API дженкінса. Це видасть кожен плагін із його версією. Збережіть наступне як plugins.groovy.

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


0

Також можна зацікавити, які оновлення доступні для плагінів. Для цього вам потрібно об'єднати дані про встановлені плагіни з інформацією про оновлення, доступні тут https://updates.jenkins.io/current/update-center.json .

Щоб проаналізувати завантажений файл як JSON, ви повинні прочитати в мережі другий рядок (який величезний).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.