Jenkins
Jenkins est un outil d'intégration continue, open source en Java[1]. Il peut servir par exemple à lancer des pipelines automatiquement ou manuellement, déployer du code sur des serveurs ou exécuter des tâches planifiées.
Installation
[modifier | modifier le wikicode]IHM
[modifier | modifier le wikicode]L'application Web Jenkins permet de créer des jobs et des vues regroupant plusieurs jobs.
- /cli/ : commandes shell de paramétrage
Mise à jour
[modifier | modifier le wikicode]L'IHM affiche les mises à jour disponibles dans "Administrer Jenkins" (/manage). En cliquant dessus, on télécharge un .war qu'il suffit de déposer à la place de l'ancien[2] :
mv /usr/lib/jenkins/jenkins.old.war
mv /downloads/jenkins.war /usr/lib/jenkins/
systemctl stop jenkins
systemctl start jenkins
systemctl status jenkins
Plugins
[modifier | modifier le wikicode]Le menu "Plugin Manager" (/pluginManager) répertorie les versions des plugins installées et disponibles.
- Git : récupération des branches à déployer en cliquant dessus. shallow clone
- ConfigHistory : versioning des jobs[3].
Jobs
[modifier | modifier le wikicode]On distingue plusieurs types de jobs : ceux qui se lancent périodiquement et ceux qui sont déclenchés par un évènement extérieur. Parmi ces dernier, on trouve des lancements manuels ou des hooks de forge logicielle (ex : création de pull request, merge, etc.).
Tableau de bord
[modifier | modifier le wikicode]L'interface web liste les jobs configurés avec le nom du job, l'état de sa dernière exécution, le temps depuis celle-ci selon son état (temps depuis dernier succès et temps depuis dernier échec), la durée de la dernière exécution, et la tendance de réussite.
La tendance d'exécution indique l'état (succès ou échec) des dernières exécution avec une image météorologique :
Cela indique si le job est stable, ou si l'exécution est instable, pouvant aboutir à un succès ou un échec de manière incertaine.
La dernière colonne contient également un bouton par job permettant de le lancer manuellement. Durant l'exécution d'un job, sa progression est indiquée graphiquement, basée sur la durée de la précédente exécution.
Hello World
[modifier | modifier le wikicode]Cliquer sur Nouveau Item et tout en bas dans le paragraphe Build, rubrique Exécuter un script shell, taper "echo Hello World!". Sauvegarder et lancer le build.
Quand on sauvegarde un item avec une erreur de syntaxe, Jenkins le refuse sans rien sauvegarder (et on ne peut pas retrouver ses modifications en retournant en arrière).
Déploiement simple
[modifier | modifier le wikicode]Dans un nouvel item, renseigner les identifiants de sa forge logicielle dans Gestion de code source.
On peut ensuite renseigner la branche que le système de gestion de versions va cloner. Par exemple si c'est Git, Jenkins lancera automatiquement un git clone
à chaque lancement du job. On peut sélectionner la branche à cloner à chaque lancement, en cochant Ce build a des paramètres, Parameter Type = "branch".
Vers Linux
[modifier | modifier le wikicode]Sur Linux cela peut être fait en SSH ou SCP. Ajouter les commandes à jouer Dans le paragraphe "Build" du job, "Exécuter un script shell".
Vers Windows
[modifier | modifier le wikicode]Sur Windows il faut préalablement lancer un service slave Jenkins (appelé "agent") sur la machine cible, qui acceptera le déploiement en passant par un nœud.
- Sur le serveur Jenkins, dans /computer, créer un nœud.
- Sur la machine cible, deux solutions :
- Si Jenkins slave ne doit pas se lancer à chaque redémarrage, exécuter la commande décrite dans /computer (en y téléchargeant le .jar et le .jnlp.
- Télécharger les .exe depuis http://repo.jenkins-ci.org/releases/com/sun/winsw/winsw/ pour installer un service qui se lancera automatiquement à chaque reboot[4].
Déploiement multi-dépôt
[modifier | modifier le wikicode]https://stackoverflow.com/questions/56676885/configuring-2-repos-with-jenkins-git-parameter-plugin
Déploiement de test à chaque PR
[modifier | modifier le wikicode]Dans le paragraphe Ce qui déclenche le build, cocher votre forge logicielle (ex : GitHub ou Stash).
Le job se lancera ensuite selon les actions déterminées dans le paragraphe, par exemple une création de PR et une commande dans la PR "deploy".
Pour qu'il se lance lors d'un merge, ...
Pipeline
[modifier | modifier le wikicode]Un pipeline est un enchainement de tâches parallélisables réalisé par Jenkins.
Backup
[modifier | modifier le wikicode]/root/jobs/jobs/Mon_groupe/jobs/Mon_flux/config.xml
Vues
[modifier | modifier le wikicode]Pour superviser un groupe de jobs (et éviter de trop utiliser le moteur de recherche), ils peuvent être listés dans des vues. Pour ce faire, une fois la vue créée, lui ajouter chaque job (en cochant de les rechercher dans les sous-répertoires).
Cela peut aussi être réalisé par une expression régulière.
Problèmes connus
[modifier | modifier le wikicode]Timeout systématique lors d'un build
[modifier | modifier le wikicode]Augmenter la durée du timeout :
vim /etc/default/jenkins
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --sessionTimeout=1440 --sessionEviction=43200"
Un job qui doit se lancer à chaque PR ne se lance pas
[modifier | modifier le wikicode]Vérifier que le compte utilisé par Jenkins dans le job ait bien les droits de lecture dans le dépôt sur la forge.
Un job se lance régulièrement avec "Started by SCM change"
[modifier | modifier le wikicode]On peut définir des branches Git par défaut inexistantes, pour éviter que ce bug écrase des déploiements manuels.
Mais il est dû dans le menu /configure, au champ Nombre de tentatives de checkout SCM > 0.
Messages d'erreur
[modifier | modifier le wikicode]502 Bad Gateway
[modifier | modifier le wikicode]service jenkins restart
ERROR: Couldn't find any revision to build
[modifier | modifier le wikicode]Parfois Jenkins ne communique pas bien avec la forge Git. Il suffit alors de relancer le build.
Si ça ne marche toujours pas, le compte de Jenkins est peut-être verrouillé dans la forge, ou il y a eu un commit --amend
qui est mal passé.
HTTP ERROR 403 No valid crumb was included in the request
[modifier | modifier le wikicode]Inutile de cliquer sur "se déconnecter", il faut supprimer dans son navigateur, les cookies et le localStorage.
IOError: [Errno 11] Resource temporarily unavailable
[modifier | modifier le wikicode]Quand Jenkins lance un script Python, son buffer d'affichage en console sature à un millier de lignes environ (pour chaque commande). Il faut donc exécuter les commandes concernées en mode moins verbeux.
Failing to obtain https://mon_jenkins.example.com/computer/mon_server/slave-agent.jnlp?encrypt=true java.net.ConnectException: Connection timed out: connect
[modifier | modifier le wikicode]L'agent Jenkins slave sur Windows (JNLP) ne parvient pas à se connecter à Jenkins. Cela peut être dû à un port bloqué dans le pare-feu Windows, dans le réseau, ou s'il y a un load balancer ou un ha-proxy il faut lancer Jenkins en ha mode ou les éviter en passant par un tunnel[5].
pending - Jenkins job is waiting for next available executor
[modifier | modifier le wikicode]En français "En attente du prochain exécuteur disponible".
Aller dans "Administrer Jenkins", "Configurer le système", et augmenter le nombre d'exécuteurs.
Sinon, mettre à jour les plugins et patienter (jusqu'à une heure).
possible memory leak due to Git plugin usage
[modifier | modifier le wikicode]Si la branche Git sélectionnée n'est pas celle déployée, c'est une fuite de mémoire[6].
Il faut mettre à jour Jenkins.
reference is not a tree
[modifier | modifier le wikicode]Si un job qui marchait ne marche plus soudainement et renvoie cette erreur, c'est que le plugin Git qui communique avec la forge logicielle se perd dans la sélection du commit à checkouter et tente d'en prendre un autre.
Dans "Avancé", renseigner la case "Refspec" avec :
+refs/heads/*:refs/remotes/mon_projet/*
There’s no agent/cloud that matches this assignment
[modifier | modifier le wikicode]Lors de la création d'un build, le champ "Restreindre où le projet peut être exécuter" ne correspond pas à un serveur connu dans la page /computer/.
Références
[modifier | modifier le wikicode]- ↑ https://github.com/jenkinsci/jenkins
- ↑ https://www.thegeekstuff.com/2016/06/upgrade-jenkins-and-plugins/
- ↑ https://wiki.jenkins.io/display/JENKINS/JobConfigHistory+Plugin
- ↑ https://hayato-iriumi.net/2019/05/23/how-to-install-jenkins-slave-as-windows-service/
- ↑ https://support.cloudbees.com/hc/en-us/articles/218097237-dedicated-JNLP-agents-formerly-slaves-are-not-able-to-connect
- ↑ https://wiki.jenkins.io/display/JENKINS/Remove+Git+Plugin+BuildsByBranch+BuildData