Nous sommes vendredi, pile juste avant vos vacances, et un commit un peu hasardeux d’un Junior vient de casser l’intégralité du projet. Toute l’équipe est en panique et vous n’avez pas d’autres choix que de rester pour réparer les dégâts, repoussant inévitablement votre départ vers d’autres contrées. En bref, votre cocktail sur la plage semble s’éloigner de plus en plus…
Et si je vous disais qu’il existe une solution à tous vos problèmes et bien plus encore. Une méthode permettant d’éviter toutes ces erreurs mais aussi d’alléger votre charge de travail ou bien s’il y en a un, celui de l’intégrateur : Je parle de la « Continuous Integration / Continuous Delivery » ou CI/CD pour les intimes.
D’une manière générale, la CI/CD est surtout un concept reposant sur un objectif simple : être moins prône à l’erreur, faire gagner du temps et produire du code de meilleure qualité, tout en étant le plus souple possible.
La CI se caractérise par un ensemble de pratiques visant à vérifier toute modification du code source. Elle peut prendre de nombreuses formes et se doit d’être adaptée à votre besoin. Cela peut aller de simples tests unitaires à des tests automatisés sur cibles et en conditions réelles.
L'un des outils les plus utilisés en développement est Git, et par extension souvent Gitlab, et ce pour une raison assez simple : En effet, il met à notre disposition des solutions simples à l’aide de pipelines (https://docs.gitlab.com/ee/ci/pipelines/) pour implémenter sa propre CI/CD que je ne peux que recommander. D’autres alternatives comme Jenkins ou Kubernetes peuvent être également un bon choix et ne relève que de vos préférences personnelles.
Source : Ultimate guide to CI/CD: Fundamentals to advanced implementation
Source : Create CI/CD Pipeline in GitLab in under 10 mins
Dans cette CI, on trouvera le plus souvent une première étape de compilation. Elle sera suivie d’une phase de test qui peut être composé des tests suivants, souvent dans cet ordre :
Il n’est pas obligatoire de tous les implémenter et la manière dont ils le sont est également libre du moment qu’ils peuvent être déroulé de manière automatique.
En tant qu’expert en test, vous allez bien évidemment me rappeler que les tests d’intégration se doivent d’être réalisé sur un environnement cible ! Et bien figurez-vous que lors de cette étape de test, il est tout à fait possible de les réaliser dans un environnement simulé à l’aide de votre outil préféré (Docker par exemple). Récupérer et analyser les résultats vous permettra d’éviter toute déconvenue lors du déploiement sur cible.
Les phases de compilation et de test sont la base essentielle de la CI mais d’autres étapes peuvent être rajoutées :
Cette liste n’est absolument pas exhaustive et il revient à vous de définir vos besoins et de construire votre CI afin de correspondre à vos exigences en termes de qualité et de maintenabilité.
Il est tout de même important de mentionner un des points négatifs de la CI/CD : En effet, toutes ces opérations se déroulent sur un serveur (distant ou local), ce qui prend généralement beaucoup plus de temps que de le faire sur une machine locale.
Il nous manque maintenant la seconde partie, à savoir le Développement Continu (CD). Ici, nous nous concentrons surtout sur un mot d’ordre très souvent prisé par les chefs de projet : la flexibilité. Je ne vous parle pas de savoir faire le grand écart au repas de famille pour épater la galerie mais bien de votre capacité à réagir le plus rapidement à toute demande ou à tout imprévu.
Reprenons notre pipeline Gitlab, nous allons pouvoir rajouter toute une série d’étapes : une étape de génération de versions ou bien encore de la génération de documents qui permettent de créer des versions de manière régulière ou bien de manière impromptue à la suite d'un besoin, par exemple.
Peut-être êtes-vous en train de vous dire que c’est trop beau pour être vrai et qu’il y a forcément un contrecoup. Et bien… Pas vraiment. Le seul inconvénient majeur de cette méthode est le temps qu’il faut prendre en amont pour définir les différentes étapes ainsi que la montée en compétences de l’équipe sur le sujet, sans oublier le coût de l’infrastructure à déployer. Heureusement, cet inconvénient est tout de même largement compensé par tous les avantages suivants :
Mise à part sur des projets assez courts et où le temps est un élément critique, je ne peux que recommander l’implémentation d’une CI/CD. Certes, cela peut vous prendre un certain temps au début mais n'oubliez pas que la CI/CD pourra être réutilisé pour tous vos projets futurs (y compris les plus petits projets donc) et ainsi améliorer la qualité du travail de manière globale.