Qu'est-ce que le CI/CD en DevOps ?

L'intégration, la livraison et le déploiement continus (le CI/CD) sont des pratiques DevOps. En d'autres termes, il s'agit de techniques qui implémentent les idéaux du DevOps. Si vous n'êtes pas familier avec ce terme, vous vous demandez peut-être : qu'est-ce que le DevOps ? Et quel est son lien avec le développement logiciel agile ? Comprendre le contexte plus large de l'évolution des pratiques de développement logiciel et les problèmes que les approches agile et DevOps tentent de résoudre peut vous aider à tirer le meilleur parti de votre processus de CI/CD.

Comment la méthode agile a changé la donne

Grâce à la révolution numérique, les logiciels et l'informatique sont passés d'une simple fonction de soutien pour de nombreuses organisations (à l'exception des éditeurs de logiciels) à une partie intégrante de nombreux secteurs d'activité.

Dans un grand nombre de secteurs, allant de la banque et de la finance au commerce de détail, en passant par l'administration publique, le tourisme et les loisirs, le développement de logiciels occupe désormais une place centrale dans le travail de nombreuses organisations. Les produits et les services sont accessibles via des applications et des services en ligne et sont pris en charge par ces derniers, tandis que les systèmes informatiques internes sont essentiels au bon fonctionnement d'une entreprise.

En 2001, alors que cette tendance commençait à s'accélérer, un groupe de développeurs logiciels a rédigé le manifeste agile. C'était leur réponse à certains des problèmes qu'ils voyaient dans la façon dont les logiciels étaient développés à l'époque. Le manifeste fournit un ensemble de valeurs et de principes pour le développement logiciel et a donné lieu à divers frameworks pour les mettre en pratique, Scrum étant l'un des plus connus.

La méthode agile considère que la priorité doit être de livrer des logiciels fonctionnels, et que la bonne communication et la collaboration entre les personnes sont essentielles pour atteindre cet objectif. Développée en réponse aux longs délais inhérents aux projets en cascade de l'époque où les logiciels étaient généralement livrés des années après la définition des exigences, alors que les besoins des utilisateurs et le contexte pouvaient avoir considérablement changé, l'approche agile consiste à accepter l'évolution des exigences.

Les frameworks et méthodologies agiles sont axés sur le travail itératif, la livraison régulière de petits fragments de logiciels fonctionnels, la collecte de feedbacks et l'adaptation en fonction de ces derniers. Il s'agissait d'un changement important par rapport à l'approche en cascade qui consiste à travailler en phases linéaires distinctes allant de la conception, au développement, aux tests et à la publication.

Comprendre le DevOps

Bien que les équipes de développement changeaient leur façon d'aborder le développement logiciel en adoptant les principes agiles, il y avait généralement peu de collaboration avec les équipes situées plus en aval du processus.

Il était fréquent pour les équipes opérationnelles, responsables de la gestion de l'infrastructure et du déploiement des logiciels, de travailler d'une manière complètement différente et de ne pas partager les mêmes objectifs que les développeurs qui rédigent le code.

Même si les développeurs travaillaient plus efficacement au sein de leur propre équipe, une fois que le build était remis aux responsables opérationnels pour qu'ils le déploient en production, il était fréquent que le processus se retrouve bloqué. Des dépendances manquantes, des problèmes de configuration de l'environnement et des bugs qui ne pouvaient pas être reproduits sur les machines locales des développeurs créaient des allers-retours incessants entre les équipes et des désaccords pour déterminer qui était responsable de la résolution du problème.

Souvent, cette stratégie était combinée à une stratégie de publication en cascade. Bien que les modifications étaient apportées de manière incrémentielle par le développement, les étapes suivantes continuaient à regrouper les modifications au sein de grosses publications peu fréquentes, supprimant ainsi la possibilité d'un feedback rapide des utilisateurs.

Un changement culturel

Combinant « développement » et « opérations », le terme « DevOps » souligne la nécessité de l'intégration des activités des deux équipes pour livrer efficacement des logiciels fonctionnels. Cela dit, son champ d'application ne se limite pas à ces seules fonctions : toutes les personnes impliquées dans le développement et la livraison de logiciels doivent s'aligner sur l'objectif commun de fournir des logiciels fonctionnels aux utilisateurs.

Le point central de DevOps est la création d'une culture de partage des responsabilités, de confiance mutuelle et de communication ouverte. Il ne suffit pas aux équipes de développement de cocher la case « terminé » une fois que le tout fonctionne sur un build local. Pour livrer un code prêt à passer en production, les développeurs ont besoin de visibilité sur les étapes qui les séparent de la publication. Cela signifie qu'il faut éliminer les barrières entre les différents services et collaborer avec les équipes chargées de l'assurance qualité, de la sécurité et de l'infrastructure pour comprendre leur rôle dans le processus.

Outils et automatisation DevOps

Si une coopération plus étroite entre les équipes peut être obtenue avec des processus manuels, il est beaucoup plus efficace d'utiliser des outils pour automatiser la plus grande partie du travail possible. L'automatisation des étapes de build, de test et de déploiement accélère le travail, ce qui signifie que les résultats de ces étapes sont disponibles beaucoup plus rapidement. L'automatisation est au cœur de l'approche DevOps, car elle permet d'établir des boucles de feedback courtes, essentielles à l'amélioration de la qualité et à la réduction des gaspillages.

Des processus efficaces

DevOps est apparu à une époque où les principes du Lean Manufacturing commençaient à être appliqués au développement logiciel. Cette méthode vise à éliminer les gaspillages en optimisant chaque étape d'un processus, en développant la qualité et en respectant les personnes.

DevOps intègre une grande partie de cette réflexion et cherche à rendre le développement logiciel plus efficace en optimisant le processus de bout en bout et en fournissant au plus tôt des informations sur ce qui est en train d'être élaboré grâce à des boucles de feedback courtes.

Cela implique d'effectuer plus tôt les activités qui se situaient en aval du développement et de traiter les problèmes détectés dès leur découverte, qu'il s'agisse de tests défaillants, de vulnérabilités de sécurité ou de problèmes de compilation.

Comme tout le monde partage la responsabilité de la mise à disposition des logiciels aux utilisateurs, la réponse classique du type « ça marche sur ma machine » n'est pas acceptable. Avec une approche DevOps, les développeurs ont une bien meilleure visibilité sur la façon dont les logiciels sont utilisés et sur les problèmes qui se posent, ce qui signifie qu'ils sont mieux placés pour les résoudre.

L'adoption du DevOps étend les avantages de la méthode agile au-delà de l'équipe de développement. En s'adaptant au rythme de travail des développeurs et en travaillant par petits fragments, il est plus facile de repérer et d'isoler les problèmes, car il y a moins de variables en jeu. De même, en générant rapidement des retours d'information, on évite de gaspiller des efforts à tester et à assembler une build qui sera ensuite abandonnée. En retour, cela permet à l'organisation dans son ensemble de profiter pleinement des avantages que procure le fait de travailler par petites étapes.

Mise en pratique du DevOps

La création d'un pipeline de CI/CD automatisé met en pratique ces idéaux du DevOps.

La pratique de l'intégration continue, qui consiste à fréquement soumettre des commits, encourage les lots de petite taille capables de passer rapidement dans le pipeline. Un système de build et de tests automatisés permet de vérifier chaque modification et de fournir des retours d'information bien plus rapidement qu'avec un processus manuel.

En tant que développeur, il est plus efficace d'obtenir un retour rapide sur ce que vous venez d'écrire, car vous êtes moins susceptible d'avoir perdu le contexte de la modification, ce qui vous permet de rester dans ce que la méthode Lean appelle le « flux ». Les tests automatisés fréquents permettent également d'améliorer la qualité, car le fait d'attraper et de corriger les bugs à un stade précoce évite de développer davantage de code par-dessus.

L'automatisation du déploiement sur les serveurs de préproduction rend le processus consistant et fiable, ce qui permet de davantage utiliser les environnements de préproduction pour les tests et les feddbacks. Le fait de déployer régulièrement de petites modifications en production plutôt que de les regrouper au sein de grandes versions peu fréquentes réduit le risque que quelque chose ne fonctionne pas sur les environnements de production, car il y a moins de variables susceptibles d'entraîner des conséquences imprévues.

Si un bug apparaît, il est plus rapide de l'isoler et de le corriger, grâce à la plus petite taille des lots. La publication de mises à jour incrémentielles signifie que vous apportez régulièrement de la valeur aux utilisateurs et que vous pouvez utiliser les feedbacks sur ces modifications pour déterminer ce que vous allez développer ultérieurement, ce qui vous permet de continuer à améliorer le produit.

Conclusion

L'objectif du CI/CD et plus généralement du DevOps est d'accélérer le processus visant à fournir des logiciels de qualité aux utilisateurs sans compromettre la qualité. Les principes DevOps recoupent et complètent les idées des méthodes Agile et Lean. En examinant l'ensemble du processus de développement logiciel et en optimisant chaque étape, vous pouvez livrer plus rapidement et donc obtenir plus vite des retours d'information, permettant ainsi un cycle continu de développement et d'amélioration.