CI/CD : définition
L'approche CI/CD permet d'augmenter la fréquence de distribution des applications grâce à l'introduction de l'automatisation au niveau des étapes de développement des applications. Les principaux concepts liés à l'approche CI/CD sont l'intégration continue, la distribution continue et le déploiement continu. L'approche CI/CD représente une solution aux problèmes posés par l'intégration de nouveaux segments de code pour les équipes de développement et d'exploitation (ce qu'on appelle en anglais « integration hell », ou l'enfer de l'intégration).
Plus précisément, l'approche CI/CD garantit une automatisation et une surveillance continues tout au long du cycle de vie des applications, des phases d'intégration et de test jusqu'à la distribution et au déploiement. Ensemble, ces pratiques sont souvent désignées par l'expression « pipeline CI/CD » et elles reposent sur une collaboration agile entre les équipes de développement et d'exploitation, que ce soit dans le cadre d'une approche DevOps ou d'ingénierie de la fiabilité des sites (SRE).
Intégration continue
Le concept de développement d'applications modernes consiste à faire travailler plusieurs développeurs simultanément sur différentes fonctions d'une même application. Toutefois, si une entreprise prévoit de fusionner tous ces morceaux de code source le même jour (le « merge day » ou « jour du fusionnement »), alors la tâche risque de s'avérer laborieuse et de nécessiter beaucoup de procédures manuelles et de temps. En effet, lorsqu'un développeur qui travaille seul apporte des modifications à une application, celles-ci peuvent entrer en conflit avec les différentes modifications apportées simultanément par d'autres développeurs. Ce problème se complexifie encore si chaque développeur a personnalisé son propre environnement de développement intégré, au lieu d'en définir un seul dans le cloud, pour toute l'équipe.
L'intégration continue (CI) permet aux développeurs de fusionner plus fréquemment leurs modifications de code dans une « branche partagée », ou un « tronc », parfois même tous les jours. Une fois que les modifications apportées par un développeur sont fusionnées, elles sont validées par la création automatique de l'application et l'exécution de différents niveaux de test automatisés (généralement des tests unitaires et d'intégration) qui permettent de vérifier que les modifications n'entraînent pas de dysfonctionnement au sein de l'application. En d'autres termes, il s'agit de tester absolument tout, des classes et fonctions jusqu'aux différents modules qui constituent l'application. En cas de détection d'un conflit entre le code existant et le nouveau code, le processus d'intégration continue permet de résoudre les dysfonctionnements plus facilement, plus rapidement et plus fréquemment.
Distribution continue
Après l'automatisation de la création et des tests unitaires et d'intégration dans le cadre de l'intégration continue, la distribution continue automatise la publication du code validé dans un référentiel. Aussi, pour garantir l'efficacité du processus de distribution continue, il faut d'abord introduire le processus d'intégration continue dans le pipeline de développement. La distribution continue permet de disposer d'un code base toujours prêt à être déployé dans un environnement de production.
Dans le cadre de la distribution continue, chaque étape (de la fusion des modifications de code jusqu'à la distribution des versions prêtes pour la production) implique l'automatisation des processus de test et de publication du code. À la fin de ce processus, l'équipe d'exploitation est en mesure de déployer facilement et rapidement une application dans un environnement de production.
Déploiement continu
L'étape finale d'un pipeline CI/CD mature est le déploiement continu. En complément du processus de distribution continue, qui automatise la publication d'une version prête pour la production dans un référentiel de code, le déploiement continu automatise le lancement d'une application dans un environnement de production. En l'absence de passerelle manuelle entre la production et l'étape précédente du pipeline, le déploiement continu dépend surtout de la conception de l'automatisation des processus de test.
Dans la pratique, dans le cadre du déploiement continu, une modification apportée par un développeur à une application cloud pourrait être publiée quelques minutes seulement après la rédaction du code en question (en supposant qu'elle passe les tests automatisés). Il est ainsi beaucoup plus facile de recevoir et d'intégrer en continu les commentaires des utilisateurs. Ensemble, ces trois pratiques CI/CD réduisent les risques liés au déploiement des applications, puisqu'il est plus simple de publier des modifications par petites touches qu'en un seul bloc. Cette approche nécessite néanmoins un investissement de départ considérable, car les tests automatisés devront être rédigés de manière à s'adapter à diverses étapes de test et de lancement dans le pipeline CI/CD.
Les outils de CI/CD courants
Les outils de CD/CI permettent aux équipes d'automatiser le développement, le déploiement et le test. Certains outils gèrent spécifiquement la partie intégration (CI), d'autres le développement et le déploiement (CD), et d'autres encore les tests continus ou les fonctions connexes.
Le serveur d'automatisation Jenkins compte parmi les outils Open Source de CI/CD les plus connus. Cette solution permet de gérer toutes les situations, du simple serveur de CI à un hub de CD complet.
Les pipelines Tekton servent de framework CI/CD pour les plateformes Kubernetes et offrent une expérience CI/CD cloud-native standard avec conteneurs.
En dehors des pipelines Jenkins et Tekton voici d'autres outils de CI/CD Open Source qui pourraient vous intéresser :
Spinnaker : plateforme de CD conçue pour les environnements multicloud
GoCD : serveur de CI/CD particulièrement axé sur la modélisation et la visualisation
Concourse : outil Open Source basé sur une approche d'automatisation continue
Screwdriver : plateforme de construction conçue pour le CD
Vous pouvez également vous tourner vers des outils de CI/CD gérés proposés par différents fournisseurs. Les principaux fournisseurs de cloud public offrent tous des solutions de CI/CD, tout comme GitLab, CircleCI, Travis CI, Atlassian Bamboo et bien d'autres.
Par ailleurs, la plupart des outils essentiels au DevOps font partie du processus de CI/CD. Les outils qui servent à l'automatisation de la configuration (comme Ansible, Chef et Puppet), à l'exécution de conteneurs (comme Docker, rkt et cri-o) et à l'orchestration des conteneurs (Kubernetes) ne sont pas des outils de CI/CD à proprement parler, mais ils apparaissent dans de nombreux worflows de CI/CD.