Как обновить Плагины jenkins с терминала?
Я пытаюсь создать сценарий bash для настройки Дженкинса. Есть ли способ обновить список плагинов с терминала Дженкинса?
При первой настройке в списке нет плагина
То есть:
java -jar jenkins-cli.jar -s `http://localhost:8080` install-plugin dry
Не сработает
5 ответов:
Простой, но рабочий способ-сначала перечислить все установленные плагины, найти обновления и установить их.
java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ list-pluginsКаждый плагин, у которого есть обновление, имеет новую версию в скобках в конце. Так что вы можете grep для тех, кто:
java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ list-plugins | grep -e ')$' | awk '{ print $1 }'Если вы вызываете install-plugin с именем плагина, он автоматически обновляется до последней версии.
Наконец, вы должны перезапустить Дженкинса.
Собирая все это вместе (можно поместить в оболочку сценарий):
UPDATE_LIST=$( java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ list-plugins | grep -e ')$' | awk '{ print $1 }' ); if [ ! -z "${UPDATE_LIST}" ]; then echo Updating Jenkins Plugins: ${UPDATE_LIST}; java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ install-plugin ${UPDATE_LIST}; java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ safe-restart; fi
На самом деле вы можете устанавливать плагины с компьютерного терминала (а не с терминала Дженкинса).
- загрузите плагин с сайта плагина (
http://updates.jenkins-ci.org/download/plugins)- скопируйте этот плагин в
$JENKINS_HOME/plugins directory- в этот момент либо запустите Jenkins, либо вызовите службу настроек перезагрузки (
http://yourservername:8080/jenkins/reload)Это позволит включить плагин в Jenkins и при условии, что Jenkins запущен.
cd $JENKINS_HOME/plugins curl -O http://updates.jenkins-ci.org/download/plugins/cobertura.hpi curl http://yourservername:8080/reload
Вот как вы можете развернуть Плагины Jenkins CI с помощью Ansible, который, конечно же, используется из терминала. Этот код является частью
roles/jenkins_ci/tasks/main.yml:- name: Plugins with_items: # PLUGIN NAME - name: checkstyle # Checkstyle - name: dashboard-view # Dashboard View - name: dependency-check-jenkins-plugin # OWASP Dependency Check - name: depgraph-view # Dependency Graph View - name: deploy # Deploy - name: emotional-jenkins-plugin # Emotional Jenkins - name: monitoring # Monitoring - name: publish-over-ssh # Publish Over SSH - name: shelve-project-plugin # Shelve Project - name: token-macro # Token Macro - name: zapper # OWASP Zed Attack Proxy (ZAP) sudo: yes get_url: dest="{{ jenkins_home }}/plugins/{{ item.name | mandatory }}.jpi" url="https://updates.jenkins-ci.org/latest/{{ item.name }}.hpi" owner=jenkins group=jenkins mode=0644 notify: Restart JenkinsЭто часть более полного примера, который вы можете найти по адресу: https://github.com/sakaal/service_platform_ansible/blob/master/roles/jenkins_ci/tasks/main.yml
Не стесняйтесь адаптировать его к вашим потребностям.
Вы можете обновить список плагинов с помощью этой командной строки
curl -s -L http://updates.jenkins-ci.org/update-center.json | sed '1d;$d' | curl -s -X POST -H 'Accept: application/json' -d @- http://localhost:8080/updateCenter/byId/default/postBack
К вашему сведению -- некоторые плагины (в частности mercurial) не устанавливаются корректно из командной строки, Если вы не используете их короткое имя. Я думаю, что это связано с триггерами в информационных данных пакета Дженкинса. Вы можете имитировать собственное обновление пакета Дженкинса, посетив
127.0.0.1:8080/pluginManager/checkUpdatesв браузере, поддерживающем javascript.Или если вы чувствуете себя мазохистом, вы можете запустить этот код python:
import urllib2,requests UPDATES_URL = 'https://updates.jenkins-ci.org/update-center.json?id=default&version=1.509.4' PREFIX = 'http://127.0.0.1:8080' def update_plugins(): "look at the source for /pluginManager/checkUpdates and downloadManager in /static/<whatever>/scripts/hudson-behavior.js" raw = urllib2.urlopen(self.UPDATES_URL).read() jsontext = raw.split('\n')[1] # ugh, JSONP json.loads(jsontext) # i.e. error if not parseable print 'received updates json' # post postback = PREFIX+'/updateCenter/byId/default/postBack' reply = requests.post(postback,data=jsontext) if not reply.ok: raise RuntimeError(("updates upload not ok",reply.text)) print 'applied updates json'И после того, как вы запустили это, вы должны быть в состоянии запустить
jenkins-cli -s http://127.0.0.1:8080 install-plugin mercurial -deploy.
Comments