Intégration continue avec Jenkins : installation et configuration de base

26 septembre 2011integration-continue, jenkins
 Cet article a été rédigé il y a plusieurs années et peut ne plus être tout à fait à jour…

Jenkins, précédemment connu sous le nom de Hudson[1], est un outil Open-Source d'Intégration Continue, écrit en JAVA.

Cet article va montrer comment installer un serveur d'Intégration Continue sous Jenkins ; et sera suivi d'un second article, qui montrera comment utiliser cette plate-forme pour intégrer un projet PHP.


Sommaire :


Intégration continue ?

Pour commencer, quelques mots sur ce qu'est l'Intégration Continue, quelques pré-requis à la mise en Intégration Continue d'un projet... Et aussi quelques points expliquant en quoi l'Intégration Cotninue peut être utile.

L'intégration continue, qu'est-ce que c'est ?

Pour faire simple, le principe est de vérifier, idéalement à chaque modification de code source, que le résultat de ces modifications de produit pas de régression sur l'application.

Autrement dit, le but est de faire de l'intégration un non-événement : au lieu d'avoir le travail de 10 développeurs mis en commun une fois par mois -- et, forcément, que tout casse pendant quelques jours, parce que chaque développeur avait interprêté les specs à sa façon --, cette mise en commun se fait maintenant à chaque modification, en continu ; ce qui permet d'augmenter les chances que chaque portion de l'application fonctionne avec ses autres composantes.


Pré-requis

Pour que l'intégration continue soit possible sur un projet, quelques pré-requis doivent être en place :

  • Le code-source de l'application doit être partagé entre tous les développeurs ; typiquement, en utilisant un système de gestion de versions (CVS, SVN, Bazaar, Git, ...),
  • Les développeurs doivent pousser réglièrement leurs modifications de code vers le système de gestion de versions,
  • Et des tests (automatisés) d'intégration doivent être mis en place, pour valider l'application (intégrer les sources de l'application sans vérifier le bon fonctionnement de celle-ci, c'est peu utile, mine de rien...)

J'ajouterais que, pour que l'Intégration Continue soit un succès, et pour que la plate-forme d'IC soit pleinement utilisée, il est nécessaire que les équipes (à tous les niveaux : développeurs, testeurs, chefs de projets, ...) soient formés à la fois à sont utilité, mais aussi à son utilisation.
Typiquement, si le management se désintéresse de l'intégration continue, une partie des équipes ne s'en souciera plus, les rapports d'échecs ne seront plus analysés, une partie des problèmes ne seront plus corrigés, et la plate-forme perdra petit à petit de son intérêt -- devenant, au mieux, un outil de déploiement régulier, et, au pire, un truc plein de rouge envoyant des mails que personne ne prend plus le temps de lire...


Pourquoi ?

Les principaux avantages de l'Intégration Continue sont les suivants :

  • Les problèmes d'intégration sont détectés rapidement, et peuvent donc être corrigés au fil de l'eau, sans avoir à attendre une passe d'intégration manuelle qui n'a lieu que trop rarement[2],
  • Les tests automatisés mis en place sur l'application, et joués à chaque intégration, permettent d'identifier rapidement les changements problématiques,
  • La dernière version stable de l'application est connue, et peut rapidement être obtenue (pour tests, démonstration, ...).


Installation de Jenkins

Installer Jenkins (un des logiciels servant de base pour une plate-forme d'Intégration Continue -- et le plus utilisé, en ce moment, pour les projets PHP), pour peu que vous disposiez d'un serveur d'intégration à peu près à jour, n'est pas bien compliqué : l'idée de base est de télécharger un .war, et de le lancer ; en ajoutant éventuellement ce lancement aux services de la machine, pour qu'il soit automatisé.

Sous Ubuntu

J'ai l'habitude d'utiliser la distribution Ubuntu sur mes machines de développement et sur mes serveurs de test/intégration[3] ; et, justement, l'installation de Jenkins sous Ubuntu est extrêment simple.

Je ne vais pas faire grand chose de plus que citer la page Installing Jenkins on Ubuntu ; mais vous avez juste quatre lignes de commandes à lancer pour installer Jenkins :

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

Avantage : Jenkins sera installé de la même manière que les autres composants du système, via le système de gestion de paquets de la distribution -- ce qui facilitera, entre autres, les mises à jour.


Et sous Windows ?

C'est généralement assez peu utile dans le cadre d'un projet PHP (encore que, en fonction du type de projet, vérifier son bon fonctionnement sous une large gamme d'OS ne soit absolument pas une mauvaise idée), mais Jenkins peut aussi être installé sous Windows.

N'ayant pas encore testé par moi-meme, je ne peux que vous pointer vers Install Jenkins as a Windows service.


Une fois que Jenkins est installé ?

Une fois Jenkins installé, il ne vous reste plus qu'à accéder, via votre navigateur web, à son interface.

Par défaut, Jenkins écoute sur le port 8080 ; donc, en fonction de l'adresse de votre serveur d'intégration, vous utiliserez une URL de ce type pour y accéder :

http://192.168.0.14:8080/

Ou, si vous avez défini une entrée DNS ou un alias dans votre fichier hosts, vous utiliserez quelque chose de ce type :

http://jenkins:8080/

Pour la suite de cet article, j'utiliserai généralement cet alias jenkins -- à vous d'adapter mes URLs à votre environnement.


Accès en CLI

En plus de cet accès Web, qui vous permet à la fois de gérer la plate-forme et vos projets via une interface relativement agréable à utiliser, il existe un accès en ligne de commande, qui est surtout utile pour scripter des opérations de maintenance.

Depuis l'interface Web, vous pouvez cliquer sur Administrer Jenkins > Ligne de commande (CLI) Jenkins (ou, plus simplement, accéder à http://jenkins:8080/cli) pour plus d'informations à ce sujet, mais le principe de base est de télécharger le fichier .jar permettant l'accès à distance :

wget http://jenkins:8080/jnlpJars/jenkins-cli.jar

Et, ensuite, de l'exécuter, avec les bons noms de commandes -- par exemple, pour afficher la liste des commandes disponibles, ainsi qu'un court descriptif :

java -jar jenkins-cli.jar -s http://jenkins:8080/ help

Nous utiliserons un peu plus loin cet accès en ligne de commande, pour semi-automatiser l'installation de plugins.


Petit tour de l'interface d'administration, et gestion de base

Maintenant que nous avons installé Jenkins, et que nous savons y accéder, faisons un rapide tour de l'interface d'administration, avant de commencer à installer les plugins qui seront plus tard utilisés pour la mise en Intégration Continue d'un projet PHP.

Tout d'abord, si nous pointons notre navigateur vers le port 8080 de notre serveur d'intégration (dans mon cas, http://192.168.0.14:8080/ -- mais, comme vu plus haut, rien ne vous empêche d'utiliser un nom de machine, comme http://jenkins:8080/), nous arrivons sur la page d'accueil de Jenkins :

001-just-installed-admin-screen.png

On peut ici noter quelques premiers éléments :

  • En haut à gauche, le menu principal, à partir duquel nous pourrons administrer Jenkins, ajouter des utilisateurs, ...
  • Juste en dessous, toujours à gauche, la file d'attente de construction, qui, à terme, indiquera les projets en attente / en cours de construction,
  • Et, bien sûr, au milieu de l'écran, puisque nous n'avons pas encore créé de job, un lien nous invitant à le faire.


Cliquer sur le lien Administrer Jenkins, dans le menu gauche, nous mène à la page de gestion de notre plate-forme d'Intégration Continue :

002-just-installed-manage-screen.png


Je vous encourage à cliquer sur la première entrée de cette page, le lien Configurer le système, qui vous permettra de configurer les paramètres généraux de la plate-forme :

003-just-installed-manage-configure-system-01.png

Comme vous pouvez le constater, la liste d'options offertes est déjà relativement longue, puisqu'elle ne tient généralement pas sur un seul écran :

003-just-installed-manage-configure-system-02.png

Heureusement, vous trouverez, pour quasiment chaque option et paramètre de Jenkins, un bouton << Aide >> à droite de l'écran.
Cliquer dessus affichera quelques informations quant aux données attendues par le champ de formulaire à côté duquel cette icône figure.


Par exemple, si je clique sur le bouton << Aide >> à droite du champ << Période d'attente >> :

003-just-installed-manage-configure-system-03-help-01.png

En l'état, il n'y a pas grand chose à configurer : les options par défaut ont tendance à faire l'affaire.


Cela dit, je ne peux que vous conseiller de prendre le temps de lire l'aide de chaque option : cela vous permettra de voir ce que vous pouvez faire avec Jenkins, ainsi que de vous familiariser avec la plate-forme.

Dans le même esprit, n'hésitez pas à faire un tour sur les autres écrans de l'interface d'administration : après tout, un peu de curiosité n'a jamais fait de mal ;-)


Installation de plugins

Une grande richesse de Jenkins (qui, de base, ne fait pas bien grand chose -- surtout pour ce qui est de projets PHP) est son système de plugins, ainsi que le grand nombre de plugins existant.

Pour accéder aux écrans de gestion des plugins, : Administrer Jenkins > Gestion des plugins, qui devrait vous mener à http://jenkins:8080/pluginManager/.
Ici, vous aurez sous les yeux la liste des plugins installés (quelques plugins sont fournis avec Jenkins, et, donc, déjà installés, même si ce n'est pas par vous), pour lesquels une mise à jour est disponible :

004-just-installed-manage-plugins-01-updates-available.png

L'onglet d'à-côté est celui qui donne la liste des plugins disponibles, plus ou moins rangés par catégories -- comme vous pouvez le constater, la liste est longue ; et la parcourir rapidement peut vous donner une idée des possibilités réelles d'une plate-forme d'Intégration Continue Jenkins :

004-just-installed-manage-plugins-02-available.png

Continuons avec le troisième onglet, qui affiche la liste des onglets installés.
Pour l'instant, il n'y en n'a que quelques uns, mais nous allons rapidement allonger cette liste :

004-just-installed-manage-plugins-03-installed.png

Et enfin, un quatrième onglet << Avancé >>, qui vous permettra notamment, si besoin est, de configurer un Proxy, par lequel Jenkins passera pour le téléchargement de plugins ou la recherche de mises à jour :

004-just-installed-manage-plugins-04-advanced.png


Principe de l'installation de plugins

Généralement, l'installation de nouveaux plugins va se faire via le second onglet vu plus haut : cochez les plugins à installer, validez via le bouton en bas de la liste, et voilà.

Mais j'ai tendance à privilégier, pour ce type d'opération, l'interface en ligne de commandes : ça a l'immense avantage d'être scriptable (autrement dit, une fois que la liste des plugins est connue et la liste des commandes correspondantes saisie, il ne reste plus qu'à la rejouer à chaque installation d'une plate-forme Jenkins -- et celles-ci sont toujours installées avec à peu près les même plugins).

En cas d'installation en ligne de commande, notons que le nom du plugin à utiliser dans la commande d'installation est le << nom court >>
Par exemple, pour le plugin Green Balls, dont la page de présentation commence comme ceci :

005-plugin-wiki-greenballs.png

Le nom court sera << greenballs >>, et la commande d'installation correspondante sera :

java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin greenballs


Que le plugin ait été installé en ligne de commande, ou directement via l'interface web, un redémarrage de Jenkins sera nécessaire -- comme indiqué, par exemple, sur la page de liste des plugins installés :

006-plugin-after-install-greenballs-01.png

Redémarrons donc la plate-forme :

006-plugin-after-install-greenballs-02-jenkins-restart.png

Et après quelques instants, le plugin que nous venons d'installer et indiqué comme tel :

006-plugin-after-install-greenballs-03-installed.png


Au passage, tant que j'y suis : dans une logique d'automatisation de l'installation des plugins, le redémarrage de Jenkins aurait aussi pu se faire depuis la ligne de commande :

java -jar jenkins-cli.jar -s http://jenkins:8080 safe-restart


Quels plugins installer ?

Considérant la taille de la liste de plugins disponibles, il va vous falloir effectuer un peu de tri, pour n'installer que ceux qui vous sont nécessaires[4].

Catégoriser les plugins n'est pas forcément évident, mais essayons ; je dirais qu'on peut les regrouper en quatre ensembles :

  • Les plugins qui sont plus en rapport avec la plate-forme Jenkins en elle-même qu'avec vos projets : le suivi de sa configuration, la gestion des constructions, l'envoi de mails de reporting, la signalisation d'échecs de construction via Jabber, ...
  • Les plugins qui permettent d'accéder au code-source de votre projet : SVN, Git, CVS, ...
  • Les plugins qui effectuent les analyses sur votre projet : tests unitaires, couverture de code, respect des normes de codage, ...
  • Et, enfin, les plugins qui permettent de publier les résultats des analyses : tracé de graphes, mise à disposition de rapports HTML, ...


Presque en vrac, voici une liste de plugins que j'ai tendance à installer (certains toujours ; d'autres plus occasionnellement), lorsqu'il s'agit de mettre en place une plate-forme d'intégration continue pour un projet PHP[5] :
(je copie-colle sauvagement un bout de la présentation de chaque plugin depuis les pages wiki correspondantes -- cliquez sur les liens pour en savoir plus)

  • Green Balls : Changes Hudson to use green balls instead of blue for successful builds.
  • HTML Publisher Plugin : This plugin publishes HTML reports.
  • Publish Over SSH Plugin : Publish files and execute commands over SSH (SCP using SFTP)
  • Audit Trail Plugin : Keep a log of who performed particular Jenkins operations, such as configuring jobs.
  • Email-ext plugin : This plugin allows you to configure every aspect of email notifications.
  • Instant Messaging Plugin : This plugin provides generic support for build notifications and a 'bot' via instant messaging protocols.
  • Jabber Plugin : This plugin enables Jenkins to send build notifications via Jabber, as well as let users talk to Jenkins via a 'bot' to run commands, query build status etc..
  • checkstyle : This plugin generates the trend report for Checkstyle, an open source static code analysis program.
  • Clover PHP Plugin : This plugin allows you to capture code coverage reports from PHPUnit.
  • DRY Plugin : This plugin generates the trend report for duplicate code checkers like CPD or Simian.
  • JDepend Plugin : The JDepend Plugin is a plugin to generate JDepend reports for builds.
  • Plot Plugin : This plugin provides generic plotting (or graphing) capabilities in Jenkins.
  • PMD Plugin : This plugin generates the trend report for PMD, an open source static code analysis program.
  • Task Scanner Plugin : This plugin scans the workspace files for open tasks and generates a trend report.
  • Violations : This plug-in generates reports static code violation detectors such as checkstyle, pmd, cpd, findbugs, fxcop, stylecop and simian.
  • xUnit Plugin : This plugin makes it possible to publish the test results of an execution of a testing tool in Hudson.
  • Phing Plugin : This plugin allows you to use Phing to build PHP projects.
  • Post build task : This plugin allows the user to execute a shell/batch task depending on the build log output.
  • Build Keeper Plugin : Automatically keep every x builds to enable long term analysis trending when discarding old builds


Et quelques autres plugins que je n'utilise pas forcément, mais que je garde à l'esprit, en me disant que, un jour ou l'autre, il y a des chances qu'ils servent (en l'occurence, ici, j'ai choisi de les installer, sur la plate-forme d'Intégration Continue que je met en place pour la rédaction de cet article) :

  • Performance Plugin : This plugin allows you to capture reports from JMeter and JUnit. Hudson will generate graphic charts with the trend report of performance and robustness.
  • Monitoring : Monitoring of Hudson / Jenkins itself with JavaMelody.
  • SCM Sync configuration plugin : Keep sync'ed your config.xml (and other ressources) jenkins/hudson files with a SCM repository
  • WebSVN2 Plugin : This plugin integrates WebSVN Version 2 browser interface for Subversion with Hudson
  • Subversion Tagging Plugin : This plugin automatically performs subversion tagging (technically speaking svn copy) on successful build.


Bien entendu, à vous de personnaliser cette liste en fonction de vos besoins -- typiquement, si vous travaillez avec Git pour certains projets, il vous faudra installer un plugin permettant d'interfacer Jenkins avec Git ;-)


Et la série de lignes de commandes correspondant à l'installation de l'ensemble de ces plugins, pour ceux d'entre vous qui, comme moi, préférent quelques copier-coller à une série de clicks dans une longue liste (en n'oubliant pas de redémarrer Jenkins en fin d'installation, bien entendu) :

java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin greenballs

java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin htmlpublisher
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin publish-over-ssh
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin audit-trail
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin email-ext
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin instant-messaging
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin jabber
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin checkstyle
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin cloverphp
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin dry
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin jdepend
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin plot
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin pmd
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin tasks
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin violations
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin xunit
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin phing
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin postbuild-task
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin build-keeper-plugin

java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin performance
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin monitoring
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin scm-sync-configuration
java -jar jenkins-cli.jar -s http://jenkins:8080/ install-plugin svn-tag

java -jar jenkins-cli.jar -s http://jenkins:8080 safe-restart


Une fois ces plugins installés, l'écran << Administrer Jenkins >> s'est un peu allongé :

006-plugin-after-all-installs-01-manage.png

Et ne parlons pas (en fait, si, parlons-en ^^) de l'écran << Configurer le système >>, qui s'enrichit de la configuration d'une partie des fonctionnalités offertes par les plugins que nous venons d'installer :

006-plugin-after-all-installs-02-configure.png


Configuration ?

Maintenant que notre plate-forme d'Intégration Continue Jenkins est installée, avec l'ensemble des plugins dont nous aurons besoin pour nos projets PHP, il ne nous reste plus qu'à la configurer, avant de pouvoir passer à la mise en IC d'un projet PHP.

Configuration du système

Nous allons retourner sur l'écran << Administrer Jenkins > Configurer le système >> que nous avions entre-aperçu plus haut, et passer en revue quelques éléments de configuration qui sont susceptibles d'être intéressants -- tout en sachant que ce intéressant dépend en bonne partie de vos besoin.


Tout d'abord, Jenkins permet de configurer qui peut accéder à la plate-forme, comment, et quels types de manipulations sont autorisés :

007-configure-01-security-access.png

En fonction de votre politique, vous choisirez de donner accès à toutes les fonctionnalités à tout utilisateur potentiel, ou vous configurez Jenkins pour que seuls les comptes administrateurs puissent accéder à certaines opérations.

N'oubliez pas deux points, tout de même :

  • Le succès de l'Intégration Continue repose en partie sur l'implication de l'ensemble des membres de l'équipe,
  • Si votre serveur est ouvert sur l'Internet, vous ne voudrez peut-être pas tout rendre public ;-)


Si vous avez installé le plugin SCM Sync configuration plugin, vu plus haut, vous aurez la possibilité de sauvegarder la configuration de votre plate-forme d'IC vers un serveur de gestion de versions ; cela peut potentiellement être intéressant, ne serait-ce que pour faciliter l'annulation de modifications insuffisament réfléchies :

007-configure-02-scm-sync-configuration.png


Ensuite, pour ceux d'entre vous qui vont travailler avec des projets sous SVN, il peut être intéressant de configurer la version de SVN émulée par Jenkins (en particulier, si vous voulez pouvoir bosser avec d'autres outils sur l'extraction effectuée par Jenkins) :

007-configure-03-svn.png


En fonction des projets, des équipes, de l'attention que chacun porte aux mails, vous voudrez éventuellement configurer de manière un peu plus poussée le reporting par e-mails :

007-configure-04-extended-email-notification.png

Notez tout de même que les notifications par e-mail pourront aussi être activées / configurées par projet.


Enfin, dans le cas où votre plate-forme Jenkins devra se connecter à d'autres machines via SSH, vous voudrez probablement configurer une clef SSH pour Jenkins :

007-configure-05-ssh-key.png

Exemple d'utilisation : pousser en SSH/SCP le résultat du build vers un serveur de reporting ; ou déployer à chaque intégration réussie une archive contenant le code-source correspondant à celle-ci.


Création d'un compte utilisateur

En fonction des réglages que vous avez effectué plus haut, chaque utilisateur de la plate-forme devra peut-être se créer un compte utilisateur -- j'ai tendance à préférer cela à un fonctionnement anonyme, ne serait-ce que pour pouvoir suivre qui agit sur la plate-forme :

008-01-must-register.png

En l'occurence, ici, j'ai configuré Jenkins pour que seul les utilisateurs identifiés puissent créer / configurer des tâches.


Donc, remplissons le formulaire -- qui ne demande que peu de données à saisir :

008-02-signup.png

Et l'identification devient possible :

008-03-signed-in.png


Nous allons donc pouvoir passer à la création et au paramétrage d'un premier job -- dont je parlerai dans un second article, qui sera publié dans les jours à venir.


Et la CLI, alors ?

Avant de terminer, je reproduis ici, à titre de curiosité, la liste des opérations qu'il est maintenant possible d'effectuer depuis la ligne de commandes :

$ java -jar jenkins-cli.jar -s http://jenkins:8080/ help
  build
    Builds a job, and optionally waits until its completion.
  cancel-quiet-down
    Cancel the effect of the "quiet-down" command.
  clear-queue
    Clears the build queue
  connect-node
    Reconnect to a node
  copy-job
    Copies a job
  create-job
    Creates a new job by reading stdin as a configuration XML file
  delete-builds
    Deletes build record(s)
  delete-job
    Deletes a job
  delete-node
    Deletes a node
  disable-job
    Disables a job
  disconnect-node
    Disconnects from a node
  enable-job
    Enables a job
  groovy
    Executes the specified Groovy script
  groovysh
    Runs an interactive groovy shell
  help
    Lists all the available commands
  install-plugin
    Installs a plugin either from a file, an URL, or from update center
  install-tool
    Performs automatic tool installation, and print its location to stdout. Can be only called from inside a build
  keep-build
    Mark the build to keep the build forever.
  list-changes
    Dumps the changelog for the specified build(s)
  login
    Saves the current credential to allow future commands to run without explicit credential information
  logout
    Deletes the credential stored with the login command
  mail
    Reads stdin and sends that out as an e-mail.
  offline-node
    Stop using a node for performing builds temporarily, until the next "online-node" command.
  online-node
    Resume using a node for performing builds, to cancel out the earlier "offline-node" command.
  quiet-down
    Quiet down Jenkins, in preparation for a restart. Don't start any builds.
  reload-configuration
    Discard all the loaded data in memory and reload everything from file system. Useful when you modified config files directly on disk.
  restart
    Restart Jenkins
  safe-restart
    Safely restart Jenkins
  set-build-description
    Sets the description of a build
  set-build-result
    Sets the result of the current build. Works only if invoked from within a build.
  version
    Outputs the current version
  wait-node-offline
    Wait for a node to become offline
  wait-node-online
    Wait for a node to become online

Si ça peut donner des idées à certains d'entre vous ;-)


Mises à jour ?

Tout comme l'installation, les mises à jour sont relativement simple à effectuer.

Mise à jour de Jenkins

J'ai rédigé le plus gros de cet article il y a plusieurs semaines, et, depuis, une (au moins) nouvelle version de Jenkins a été publiée.
Si une mise à jour existe, Jenkins le signale, en haut de l'écran d'administration :

500-update-01-update-available.png

Vous pourriez cliquer sur le lien pour télécharger la nouvelle version du fichier .war de Jenkins, et le déployer à la main, mais, considérant que nous avons effectué notre installation en utilisant le gestionnaire de paquets de notre distribution Linux, ce serait un peu dommage...


A la place, utilisons ce gestionnaire de paquets pour installer la mise à jour : tout d'abord, mettons à jour la liste des paquets disponibles :

sudo apt-get update

Et ensuite, nous pouvons soit mettre à jour l'ensemble des logiciels installés sur notre serveur d'Intégration Continue :

sudo apt-get dist-upgrade

Soit ne mettre à jour que Jenkins[6] :

sudo apt-get install jenkins

Ce qui donnerait :

500-update-02-apt-get-install.png

Et le numéro de version de notre plate-forme d'Intégration Continue, en bas à droite de l'écran, a changé ; ici, nous sommes passés de la version 1.424 à la version 1.431.

500-update-03-update-done.png


Mise à jour des plugins

Pour ce qui est des plugins, il est aussi possible de les mettre à jour.

Le plus << simple >> est probablement d'ouvrir l'écran de gestion des plugins, qui affichera la liste des modules pouvant être mis à jour :

500-update-04-plugins-updates-available.png

Cochez les plugins que vous souhaitez mettre à jour, cliquez sur le bouton << Installer >>, et voila, les plugins se mettent à jour ;-)

500-update-05-plugins-updates-working.png

Et notez que vous pouvez même cocher la case en bas de l'écran de mises à jour, pour que Jenkins redémarre tout seul après cette mise à jour, chargeant la nouvelle version des plugins :

500-update-06-plugins-updates-restart.png


Liens utiles

Je ne peux terminer sans ajouter quelques liens, pour ceux qui voudraient en savoir plus, ou n'auraient pas la patience d'attendre :


Notes

[1] Pour faire simple, le projet Hudson s'est renommé en Jenkins suite à un désaccord avec Oracle -- et, maintenant, les deux projets ont tendance à se considérer l'un-l'autre comme des forks...

[2] Pour ceux qui ont déjà travaillé sur des projets avec une intégration manuelle peu fréquente et difficile, l'Intégration Continue est un changement agréable !

[3] Je connais pas trop mal Ubuntu, que j'utilise depuis plusieurs années, après avoir utilisé Debian pendant quelques années aussi ; ça marche pas trop mal pour un environnement de << non-production >> ; il est assez facile (indispensable pour ceux d'entre-nous qui n'ont pas trop l'habitude de Linux) de trouver de la documentation et du support autour d'Ubuntu ; et les paquets en rapport avec PHP sont à peu près à jour

[4] Si vous avez envie de vous amuser et de tester 36 plugins, libre à vous de le faire -- mais, éventuellement, privilégiez une installation de test de Jenkins, sur une autre machine que votre vrai serveur d'intégration ;-)

[5] Au pire, certains des modules installés ne seront pas utilisés pour certains projets -- en gardant à l'esprit qu'installer plein de plugins rend potentiellement plus complexe la configuration d'un projet

[6] Oui, c'est apt-get install qui permet de mettre un jour un paquet spécifique, sans mettre à jour les autres logiciels

[7] C'est de l'Open Source, libre à vous de participer et d'améliorer ;-) et l'hébergement sur GitHub devrait vous aider à le faire ;-)