Как я могу получить список установленных плагинов Jenkins?
Я искал документ API удаленного доступа Jenkins, но он не был найден. Должен ли я использовать CLI Jenkins? Есть ли документ или пример?
Как я могу получить список установленных плагинов Jenkins?
Я искал документ API удаленного доступа Jenkins, но он не был найден. Должен ли я использовать CLI Jenkins? Есть ли документ или пример?
Вы можете получить информацию с помощью Jenkins Script Console, доступ к которой можно получить, посетив http://<jenkins-url>/script
. (Учитывая, что вы вошли в систему и получили необходимые разрешения).
Введите следующий Groovy Script, чтобы перебрать установленные плагины и распечатать соответствующую информацию:
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
Он распечатает список результатов, подобный этому (обрезанный):
Эти решения похожи на один из ответов выше в том, что он использует Groovy, но вместо этого мы используем консоль Script. Консоль Script чрезвычайно полезна при использовании Jenkins.
Обновление
Если вы предпочитаете отсортированный список, вы можете вызвать этот sort
метод:
Jenkins.instance.pluginManager.plugins.sort { it.getDisplayName() }.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
Отрегулируйте закрытие по вашему желанию.
В эти дни я использую тот же подход, что и ответ, описанный ниже @Behe, вместо fooobar.com/questions/79472/...
Вы можете использовать API в сочетании с аргументами глубины, XPath и оболочки.
Следующее будет запрашивать API pluginManager для отображения всех подключаемых модулей, но только для возврата их атрибутов shortName и версии. Вы можете, конечно, получить дополнительные поля, добавив '|' до конца параметра XPath и указания шаблона для идентификации узла.
wget http://<jenkins>/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins
Аргумент wrapper необходим в этом случае, потому что он возвращает более одного узла как часть результата, и в том, что он сопоставляет несколько полей с XPath и несколькими узлами плагина.
Вероятно, полезно использовать следующий URL-адрес в браузере, чтобы узнать, какая информация о плагинах доступна, а затем решить, что вы хотите ограничить с помощью XPath:
http://<jenkins>/pluginManager/api/xml?depth=1
Дженкинс 1.588 (2 nd от ноября 2014 года) и 1.647 (4 th от февраля 2016 года )
Используйте 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 документации.
CLI Jenkins поддерживает список всех установленных плагинов:
java -jar jenkins-cli.jar -s http://localhost:8080/ list-plugins
Ответ здесь был несколько неполным. И мне пришлось скомпилировать информацию из других источников, чтобы фактически получить список плагинов.
CLI Jenkins позволит нам взаимодействовать с нашим сервером Jenkins из командной строки. Мы можем получить его с помощью простого звонка.
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
Если вы работаете в среде докеров и хотите вывести список плагинов в формате plugins.txt, чтобы передать это в файл install_scripts.sh, используйте этот скрипт в консоли http://{jenkins}/script
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
Ответ Behe с сортировочными плагинами не работал на моей машине Jenkins. Я получил ошибку 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
для запуска кода.
Если вы являетесь администратором Jenkins, вы можете использовать страницу системной информации Jenkins:
http://<jenkinsurl>/systemInfo
На домашней странице Дженкинса:
Или же
Поделиться другой опцией здесь с учетными данными
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/ /:/'
С 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
Я думаю, что это недостаточно хорошие ответы (ответы)... многие из них связаны с несколькими дополнительными шагами под капотом. Вот как я это сделал.
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 your list: "
cat plugin-list
Я хотел найти решение, которое могло бы работать с мастером без каких-либо требований к авторизации и не рассматривало его здесь. Я сделал быстрый скрипт 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
Другой вариант для пользователей 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)
Существует таблица, в которой перечислены все установленные плагины и включены ли они в 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, с допустимым именем пользователя и APIKey для этого соответствующего пользователя. Ключ API для пользователя доступен с помощью кнопки "Управление пользователями" → "Выбрать пользователя" → "Ключ API".
Возможно, вам придется продлить сон, если ваша установка Дженкинса займет больше времени, чтобы начать.
yum update -y
инициализации 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. Получить jenkins cli.
CLI jenkins позволит нам взаимодействовать с нашим сервером jenkins из командной строки. Мы можем получить его с помощью простого звонка.
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()}"}
Вам также может быть интересно, какие обновления доступны для плагинов. Для этого вам необходимо объединить данные об установленных плагинах с информацией об обновлениях, доступных здесь: 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}")
}