Как я могу получить список установленных плагинов Jenkins?
Я искал документ API удаленного доступа Jenkins, но он не был найден. Должен ли я использовать CLI Дженкинса? Есть ли документ или пример?
Как я могу получить список установленных плагинов Jenkins?
Я искал документ API удаленного доступа Jenkins, но он не был найден. Должен ли я использовать CLI Дженкинса? Есть ли документ или пример?
Ответы:
Вы можете получить информацию, используя консоль сценариев Jenkins, доступную при посещении http://<jenkins-url>/script
. (Учитывая, что вы вошли в систему и имеете необходимые разрешения).
Введите следующий скрипт Groovy, чтобы перебрать установленные плагины и распечатать соответствующую информацию:
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
Он напечатает список результатов примерно так (обрезано):
Это решение похоже на один из приведенных выше ответов в том, что оно использует Groovy, но здесь мы вместо этого используем консоль сценария. Консоль сценария чрезвычайно полезна при использовании Jenkins.
Обновить
Если вы предпочитаете отсортированный список, вы можете вызвать этот sort
метод :
def pluginList = new ArrayList(Jenkins.instance.pluginManager.plugins)
pluginList.sort { it.getShortName() }.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
Настройте Closure по своему вкусу (например, здесь он отсортирован по shortName, в примере он отсортирован по 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()}" }
В эти дни я использую тот же подход, что и ответ, описанный @Behe ниже вместо https://stackoverflow.com/a/35292719/1597808
Вы можете использовать API в сочетании с аргументами глубины, XPath и оболочки.
Следующее запросит API модуля pluginManager, чтобы получить список всех установленных плагинов, но только чтобы вернуть их атрибуты shortName и version. Конечно, вы можете получить дополнительные поля, добавив '|' до конца параметра XPath и указания шаблона для идентификации узла.
wget http://<jenkins>/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins
В этом случае требуется аргумент-обертка, поскольку он возвращает более одного узла как часть результата, поскольку он сопоставляет несколько полей с XPath и несколькими подключаемыми узлами.
Вероятно, полезно использовать следующий URL в браузере, чтобы увидеть, какая информация о плагинах доступна, а затем решить, что вы хотите ограничить с помощью 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
Дженкинс 1,588 (2 - е ноября 2014 г.) и 1,647 (4 - е февраля, 2016)
CLI Jenkins поддерживает перечисление всех установленных плагинов:
java -jar jenkins-cli.jar -s http://localhost:8080/ list-plugins
list-plugins
CLI не требует, чтобы у пользователя было полное разрешение / RunScripts, как у groovy
команды.
Используйте 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()}"
Если вы хотите поиграть с кодом, вот документация Jenkins Java API .
isActive()
этом ответе есть API- интерфейс, который вы можете использовать в скрипте groovy для получения состояния плагина. См. Javadoc.jenkins-ci.org/hudson/PluginWrapper.html#isActive () .
Если вы работаете в среде докера и хотите вывести список плагинов в формате plugins.txt, чтобы передать его в install_scripts.sh, используйте следующие сценарии в http://{jenkins}/script
консоли:
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:latest")
}
:latest
в конец:println ("${plugin.getShortName()}:latest")
Ответы здесь были несколько неполными. И мне пришлось собирать информацию из других источников, чтобы фактически получить список плагинов.
CLI Jenkins позволит нам взаимодействовать с нашим сервером Jenkins из командной строки. Мы можем получить это с помощью простого вызова curl.
curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar
Сохраните следующее как plugins.groovy
.
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}
Вызовите сервер Jenkins ( 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
Ответ Бихе с сортировкой плагинов не работал на моей машине Дженкинс. Я получил сообщение об ошибке 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>/script
URL для запуска кода.
displayName
времени распечатывания shortName
, это очень сбивает с толку, так как некоторые плагины не одинаковы для обоих по алфавиту, и в результате получается список, который не выглядит отсортированным. Изменение it.displayName
к it.shortName
Решает это красиво.
Если вы являетесь администратором Jenkins, вы можете использовать информационную страницу системы Jenkins:
http://<jenkinsurl>/systemInfo
/systeminfo
не работает (HTTP 404) на Jenkins 1.594
http://localhost:8080/systemInfo
некоторые серверы чувствительны к регистру. Также обратите внимание, что для этого требуется, чтобы в данный момент вошедший в систему пользователь имел разрешение «Общий / Администратор».
С curl
и jq
:
curl -s <jenkins_url>/pluginManager/api/json?depth=1 \
| jq -r '.plugins[] | "\(.shortName):\(.version)"' \
| sort
Эта команда выводит данные в формате, используемом специальным plugins.txt
файлом Jenkins, который позволяет предварительно установить зависимости (например, в образе докера):
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
С домашней страницы Дженкинс:
Или
Совместное использование другого варианта, найденного здесь, с учетными данными
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
Я хотел решение, которое могло бы работать на master без каких-либо требований авторизации и не видел его здесь. Я сделал быстрый скрипт bash, который вытащит все версии из каталога плагинов.
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:
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)
Я думаю, что это не достаточно хороший ответ (ы) ... многие включают в себя пару дополнительных шагов под капотом. Вот как я это сделал.
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
Вас также может заинтересовать, какие обновления доступны для плагинов. Для этого вам необходимо объединить данные об установленных плагинах с информацией об обновлениях, доступной здесь https://updates.jenkins.io/current/update-center.json .
Чтобы проанализировать загруженный файл как JSON, вы должны прочитать онлайн вторую строку (которая огромна).
# 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}")
}
В таблице http: // jenkins / systemInfo приведена таблица со всеми установленными плагинами и с указанием, включены ли они.
Если 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`
Для версии Jenkins 2.125 сработало следующее.
ПРИМЕЧАНИЕ. Замените разделы с именами USERNAME и APIKEY действительными UserName и APIKey для этого соответствующего пользователя. Ключ API для пользователя доступен через Управление пользователями → Выбрать пользователя → Ключ API .
Возможно, вам придется продлить сон, если установка Jenkins занимает больше времени для запуска.
Инициация yum update -y
также обновит версию, если вы установили Jenkins также с помощью 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
##############
Есть много способов получить эту информацию, но я пишу двумя способами, как показано ниже:
1. Получить Дженкинс кли.
CLI jenkins позволит нам взаимодействовать с нашим сервером jenkins из командной строки. Мы можем получить это с помощью простого вызова curl.
curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar
2. Создайте заводной скрипт. ИЛИ из консоли скриптов jenkins
Нам нужно создать отличный скрипт для анализа информации, которую мы получаем от API jenkins. Это выведет каждый плагин с его версией. Сохраните следующее как plugins.groovy.
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}