Comment mettre à jour les plugins jenkins à partir du terminal?
j'essaye de créer un script bash pour configurer Jenkins. Y a-t-il un moyen de mettre à jour une liste de plugin à partir du terminal Jenkins?
A la première installation il n'y a pas de plugin disponible sur la liste
i.e.:
java -jar jenkins-cli.jar -s `http://localhost:8080` install-plugin dry
ne fonctionne pas
5 réponses
une façon simple mais efficace est d'abord de lister tous les plugins installés, de rechercher les mises à jour et de les installer.
java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ list-plugins
Chaque plugin qui a une mise à jour disponible, a la nouvelle version entre parenthèses à la fin. De sorte que vous pouvez grep pour ceux:
java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ list-plugins | grep -e ')$' | awk '{ print }'
si vous appelez install-plugin avec le nom du plugin, il est automatiquement mis à jour à la dernière version.
Enfin, vous devez redémarrer jenkins.
Mettre tous ensemble (peut être placé dans un script shell):
UPDATE_LIST=$( java -jar /root/jenkins-cli.jar -s http://127.0.0.1:8080/ list-plugins | grep -e ')$' | awk '{ print }' );
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
vous pouvez en fait installer des plugins depuis le terminal de l'ordinateur (plutôt que le terminal de Jenkins).
- télécharger le plugin à partir du site du plugin (
http://updates.jenkins-ci.org/download/plugins
) - Copiez ce plugin dans le
$JENKINS_HOME/plugins directory
- à ce moment-là, Lancez Jenkins ou appelez le service paramètres de rechargement (
http://yourservername:8080/jenkins/reload
)
ceci activera le plugin dans Jenkins et en supposant que Jenkins est lancé.
cd $JENKINS_HOME/plugins
curl -O http://updates.jenkins-ci.org/download/plugins/cobertura.hpi
curl http://yourservername:8080/reload
Voici comment vous pouvez déployer les plugins Jenkins CI en utilisant Ansible, qui est bien sûr utilisé à partir du terminal. Ce code est une partie de 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
C'est une partie d'un exemple plus complet que vous pouvez trouver à: https://github.com/sakaal/service_platform_ansible/blob/master/roles/jenkins_ci/tasks/main.yml
n'hésitez pas à l'adapter à vos besoins.
Vous pouvez mettre à jour la liste des plugins avec cette ligne de commande
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
FYI -- certains plugins (mercurial en particulier) ne s'installent pas correctement à partir de la ligne de commande sauf si vous utilisez leur nom court. Je pense que ça a à voir avec les déclencheurs dans les données du paquet jenkins. Vous pouvez simuler la mise à jour du paquet de jenkins en visitant 127.0.0.1:8080/pluginManager/checkUpdates
dans un navigateur compatible javascript.
Ou si vous vous sentez masochiste, vous pouvez exécuter ce code 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'
Et une fois que vous avez cela, vous devriez être en mesure d'exécuter jenkins-cli -s http://127.0.0.1:8080 install-plugin mercurial -deploy
.