Як я можу отримати список встановлених плагінів Jenkins?
Я шукав документ API віддаленого доступу Jenkins, але його не було знайдено. Чи варто використовувати CLI Дженкінса? Чи є документ чи приклад?
Як я можу отримати список встановлених плагінів Jenkins?
Я шукав документ API віддаленого доступу Jenkins, але його не було знайдено. Чи варто використовувати CLI Дженкінса? Чи є документ чи приклад?
Відповіді:
Ви можете отримати інформацію за допомогою консолі сценарію Дженкінса, до якої можна відвідати, відвідавши сторінку http://<jenkins-url>/script
. (Враховуючи, що ви ввійшли в систему та маєте необхідні дозволи).
Введіть наступний сценарій Groovy, щоб перебрати встановлені плагіни та роздрукувати відповідну інформацію:
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
Він буде друкувати список результатів таким чином (відрізаний):
Це рішення схоже на один із наведених вище відповідей тим, що він використовує Groovy, але тут ми використовуємо консоль сценарію. Консоль сценарію надзвичайно корисна при використанні Дженкінса.
Оновлення
Якщо ви віддаєте перевагу відсортованому списку, ви можете зателефонувати за цим sort
методом :
def pluginList = new ArrayList(Jenkins.instance.pluginManager.plugins)
pluginList.sort { it.getShortName() }.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
Налаштуйте закриття на свій смак (наприклад, тут воно відсортовано за коротким іменем, у прикладі відсортовано за 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 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
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 не вимагає від користувача дозволу Загальні / Виконати сценарії, як 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()}"
Якщо ви хочете пограти з кодом, ось документація Java API 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 '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()}"}
Телефонуйте на сервер Дженкінса ( 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
Вирішує це красиво.
Якщо ви адміністратор Дженкінса, ви можете скористатися інформаційною сторінкою системи Дженкінса:
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
файлом Дженкінса, який дозволяє попередньо встановити залежності (наприклад, у зображенні докера):
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, який витягне всі версії з плагіну 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
Я думаю, що це недостатньо хороші відповіді (відповіді) ... багато хто передбачає пару додаткових кроків під кришкою. Ось як я це зробив.
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
Ще один варіант для користувачів 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)
# 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`
Для версії 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
##############
Є багато способів отримати цю інформацію, але я пишу два способи, як показано нижче: -
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()}"}
Також можна зацікавити, які оновлення доступні для плагінів. Для цього вам потрібно об'єднати дані про встановлені плагіни з інформацією про оновлення, доступні тут https://updates.jenkins.io/current/update-center.json .
Щоб проаналізувати завантажений файл як JSON, ви повинні прочитати в мережі другий рядок (який величезний).