Après s’être attardés sur la genèse et quelques détails techniques de Jenkins, nos confrères d’Infoworld analysent une peu plus cette solution d’intégration et de livraison continues.

Blue Ocean, l'interface graphique Jenkins

Le plug-in Blue Ocean permet de bénéficier de la dernière et de la meilleure interface utilisateur Jenkins, et de faire profiter l’utilisateur d’une expérience graphique. Il est possible d’ajouter le plug-in Blue Ocean à une installation Jenkins existante ou d’utiliser un conteneur Jenkins/Blue Ocean Docker. Une fois que Blue Ocean est installé, le menu principal de Jenkins comportera une icône supplémentaire :

Il est également possible d’ouvrir Blue Ocean directement. Il se trouve dans le dossier /blue du serveur Jenkins.

La création de pipelines dans Blue Ocean est un peu plus graphique que dans le serveur Jenkins brut :

Jenkins Docker

Comme mentionné auparavant, Jenkins est également distribué sous forme d'image Docker. Le processus n’est pas beaucoup plus compliqué : une fois choisi le type de SCM, il faut indiquer une URL et créer des identifiants, et créer ensuite un pipeline à partir d'un seul référentiel. On peut aussi faire un scan de tous les référentiels de l’entreprise. Chaque branche disposant d'un script de pipeline Jenkinsfile aura son pipeline.

Exemple d’exécution d’une image Blue Ocean Docker avec quelques plug-ins de service Git supplémentaires par rapport à la liste par défaut des fournisseurs SCM :

Après avoir exécuté certains pipelines, le plug-in Blue Ocean affichera leur état, comme indiqué ci-dessus. Il est possible de zoomer sur un pipeline particulier pour voir les étapes et les phases :

On peut également zoomer sur les branches (en haut) et les activités (en bas) :

 

Crédit Photo : IDG

Pourquoi utiliser Jenkins ?

Le plug-in Jenkins Pipeline utilisé par nos confrères d’InfoWorld prend en charge un cas d’usage général d'intégration/livraison continues (CI/CD). Il correspond probablement à l’usage le plus courant de Jenkins. Il faudra prendre en compte d’autres considérations pour des cas d’usage plus spécifiques. Les projets Java étaient la raison d'être initiale de Jenkins. On a déjà vu que Jenkins supportait les builds Maven. Il supporte également Ant, Gradle, JUnit, Nexus, et Artifactory. Android exécute une sorte de Java, mais la question d’un test pour la grande variété d'appareils Android se pose. Le plug-in d'émulation Android permet de construire et de faire des tests sur tous les appareils émulés. Le plug-in Google Play Publisher permet d'envoyer des builds vers un canal alpha dans Google Play pour la livraison ou pour effectuer des tests supplémentaires sur de vrais appareils.

Dans certains cas, nos confrères ont spécifié un conteneur Docker comme agent pour un pipeline et ont fait tourner Jenkins et Blue Ocean dans un conteneur Docker. Les conteneurs Docker sont très utiles dans un environnement Jenkins pour améliorer la vitesse, l'évolutivité et la cohérence.

Il y a deux grands cas d’usage pour Jenkins et GitHub. Le premier concerne l'intégration build, laquelle peut inclure un service hook pour déclencher Jenkins à chaque commit dans son référentiel GitHub. Le second concerne l’usage de l'authentification GitHub pour contrôler l'accès à Jenkins via OAuth. Jenkins supporte de nombreux langages autres que Java. Pour le C/C++, des plug-ins permettent de capturer les erreurs et les alertes de la console, de générer des scripts de build avec CMake, d'exécuter des tests unitaires et d'effectuer une analyse statique du code.

Jenkins s’intègre à différents niveaux avec plusieurs outils PHP. Même si le code Python n’a pas besoin d'être construit (sauf si l’on utilise Cython, par exemple, ou si l’on crée une roue Python pour l'installation), l’intégration de Jenkins avec des outils de test et de reporting Python, comme Nose2 et Pytest, et des outils de qualité de code comme Pylint peut s’avérer utile. De même, Jenkins s'intègre à des outils Ruby comme Rake, Cucumber, Brakeman et CI::Reporter.

Jenkins pour le CI/CD                                                    

En conclusion, Jenkins permet de mettre en place simplement un environnement d'intégration et de livraison continues (CI/CD) pour quasiment toutes les combinaisons de langages et de référentiels de code source en utilisant des pipelines, et en automatisant d'autres tâches de développement courantes. Même si Jenkins n’évite pas l’écriture de scripts à certaines étapes, il offre une solution plus rapide et plus robuste pour intégrer toute la chaîne d'outils de construction, de test et de déploiement que si on le faisait soi-même.