Qu'est-ce que l'intégration continue ?
Développez l'agilité de votre équipe grâce à un feedback accéléré. Parce que votre évolution dépend de la vitesse de vos tests.
L'intégration continue (CI) désigne la pratique qui consiste à automatiser l'intégration des changements de code réalisés par plusieurs contributeurs dans un seul et même projet de développement. Il s'agit d'une bonne pratique DevOps principale, permettant aux développeurs de logiciels de merger fréquemment des changements de code dans un dépôt central où les builds et les tests s'exécutent ensuite. Des outils automatisés sont utilisés pour affirmer l'exactitude du nouveau code avant son intégration.
Il s'articule autour d'un système de contrôle de version du code source. Le système de contrôle de version est également complété par d'autres contrôles, comme des tests de qualité du code automatisés, des outils de revue du style syntaxique, et plus encore.
Comment passer à l'intégration continue ?
Découvrez comment adopter l'intégration continue et les tests automatisés en cinq étapes. Lire l'article
Cinq conseils sur les dépôts favorisant l'intégration continue
Cinq conseils pour tirer le meilleur parti de Git et de votre outil d'intégration continue. Lire l'article
Outils d'intégration continue
Cinq conseils pour tirer le meilleur parti de Git et de votre outil d'intégration continue. Lire l'article
Développement basé sur le tronc
Découvrez-en plus sur le développement basé sur le tronc, une pratique de contrôle de version où les développeurs mergent de petites mises à jour fréquentes vers un « tronc » principal ou une branche principale. Lire l'article
L'importance de l'intégration continue
Afin de comprendre l'importance de la CI, il est utile d'évoquer d'abord certaines difficultés qui se posent souvent en raison de l'absence de celle-ci. Sans elle, les développeurs doivent se coordonner manuellement et communiquer lorsqu'ils contribuent au code du produit final. Cette coordination s'étend au-delà des équipes de développement et touche aussi les opérations et le reste de l'organisation. Les équipes produit doivent coordonner les lancements successifs de fonctionnalités et de correctifs, ainsi que les membres de l'équipe qui en seront responsables.
Dans un environnement sans CI, la communication peut devenir une tâche de synchronisation complexe et intriquée, ce qui ajoute des coûts d'administration inutiles aux projets. Les livraisons de code sont ralenties et les taux de défaillance augmentent, car les développeurs doivent gérer les intégrations de façon sensible et réfléchie. Ces risques augmentent de façon exponentielle à mesure que l'équipe d'ingénierie et la base de code prennent de l'ampleur.
Sans un solide pipeline de CI, l'équipe d'ingénierie peut être déconnectée du reste de l'organisation. La communication entre les équipes de produit et d'ingénierie peut être fastidieuse. Les ingénieurs se transforment en une sorte de boîte noire qui reçoit des exigences et des fonctionnalités du reste de l'équipe et dont on attend des résultats en retour. Il leur sera plus difficile d'estimer le délai de livraison pour les différentes demandes, car le temps nécessaire à l'intégration de nouveaux changements présente un risque inconnu.
Rôle de la CI
La CI contribue à faire évoluer l'effectif et la production des équipes d'ingénierie. En introduisant la CI dans le scénario ci-dessus, les développeurs peuvent travailler sur des fonctionnalités en parallèle et en toute indépendance. Lorsqu'ils sont prêts à merger ces fonctionnalités dans le produit final, ils peuvent le faire de façon indépendante et rapide. La CI est une pratique utile et bien établie dans les organisations d'ingénierie logicielle modernes et ultra performantes.
Comment utiliser la CI
La CI est généralement utilisée en parallèle d'un workflow de développement Agile. Une organisation compile une liste des tâches qui composent une feuille de route produit. Ces tâches sont ensuite réparties entre les membres de l'équipe d'ingénierie logicielle à des fins de livraison. Grâce à la CI, les développeurs assignés peuvent réaliser ces tâches de développement en parallèle et en toute indépendance. Une fois l'une de ces tâches terminée, un développeur introduit ce nouveau travail dans le système de CI pour l'intégrer au reste du projet.
Intégration continue (CI), déploiement continu et livraison continue
L'intégration, le déploiement et la livraison continus sont les trois phases d'un pipeline de livraison de logiciels automatisé, y compris un pipeline DevOps. Ces trois phases font passer le logiciel de l'état de concept à celui de produit livré à l'utilisateur final. La phase d'intégration constitue la première étape du processus. L'intégration continue couvre le processus par lequel plusieurs développeurs tentent de merger leurs changements de code dans le dépôt de code principal d'un projet.
La livraison continue est l'extension qui suit l'intégration continue. La phase de livraison consiste à concevoir un artefact qui sera livré aux utilisateurs finaux. Durant cette phase, des outils de build automatisés s'exécutent pour générer l'artefact. Cette phase de build est dite « toujours fonctionnelle », c'est-à-dire que l'artefact devrait être prêt à être déployé auprès des utilisateurs à tout moment.
Le déploiement continu constitue la dernière phase du pipeline. Il consiste à lancer et à distribuer automatiquement l'artefact logiciel aux utilisateurs finaux. Au moment du déploiement, l'artefact a réussi les phases d'intégration et de livraison. Le moment est maintenant venu de le déployer ou de le distribuer automatiquement. Pour ce faire, on utilise des scripts ou des outils qui déplacent automatiquement l'artefact vers des serveurs publics ou vers un autre mécanisme de distribution, comme une plateforme de commercialisation d'app.
Avantages et défis de la CI
L'intégration continue est un aspect essentiel de DevOps et des équipes de développement ultra performantes. Ses avantages ne profitent pas seulement à l'équipe d'ingénierie, mais aussi à l'ensemble de l'organisation. Elle permet d'accroître la transparence et de mieux comprendre le processus de développement et de livraison de logiciels. Ainsi, le reste de l'organisation peut mieux planifier et exécuter les stratégies de commercialisation. Voici quelques-uns des avantages de la CI pour l'organisation dans son ensemble.
Garantir l'évolutivité
Grâce à la CI, les organisations peuvent faire évoluer leur équipe d'ingénierie, leur base de code et leur infrastructure. En minimisant les tâches d'administration et la communication nécessaires pour l'intégration du code, la CI aide au développement de workflows DevOps et agile. Elle permet à chaque membre de l'équipe de gérer un nouveau changement de code jusqu'à sa livraison. Elle offre la possibilité d'évoluer en éliminant les dépendances organisationnelles lors du développement des différentes fonctionnalités. Les développeurs peuvent désormais travailler sur des fonctionnalités dans un silo isolé et avoir l'assurance que leur code s'intégrera au reste de la base de code de façon transparente, ce qui est un processus DevOps central.
Améliorer la boucle de feedback
Autre effet secondaire non négligeable de la CI, l'accélération du feedback sur les décisions métier. Les équipes produit peuvent tester des idées et itérer plus rapidement sur des designs de produit grâce à une plateforme de CI optimisée. Il est possible de faire rapidement un push des changements et d'évaluer leur succès. Les bugs ou autres problèmes peuvent être rapidement gérés et corrigés.
Améliorer la communication
La CI améliore la communication et la responsabilité en matière d'ingénierie globale, ce qui permet une plus grande collaboration entre le développement et les opérations au sein d'une équipe DevOps. En introduisant des workflows de pull request associés à la CI, les développeurs profitent d'un partage des connaissances passif. Les pull requests leur permettent d'observer et de commenter le code des autres membres de l'équipe. Les développeurs peuvent désormais visualiser des branches de fonctionnalité et collaborer sur celles-ci à mesure que les fonctionnalités avancent dans le pipeline de CI. La CI peut également être utilisée pour réduire les dépenses liées aux ressources de QA. Un pipeline de CI efficace avec une couverture de test automatisée et très fiable protégera contre les régressions et garantira que les nouvelles fonctionnalités correspondent à une spécification. Avant que le nouveau code ne soit mergé, il doit passer avec succès la suite d'assertions de test de CI qui empêchera toute nouvelle régression.
Les avantages de la CI l'emportent de loin sur les défis liés à son adoption. Cela dit, il est important d'être conscient de ces défis. Les véritables défis liés à la CI se posent lors de son intégration à un projet qui n'y faisait jusqu'à présent pas appel. La plupart des projets de développement modernes adopteront la CI dès les premières étapes de leur mise en œuvre, ce qui va limiter les difficultés liées à une adoption ultérieure.
Adoption et installation
Les défis de la CI se situent principalement au niveau de l'adoption par l'équipe et de l'installation technique initiale. Si une équipe ne possède actuellement pas de solution de CI, elle devra peut-être déployer des efforts pour en sélectionner une et se lancer. Il faut donc tenir compte de l'infrastructure d'ingénierie existante lors de l'installation d'un pipeline de CI.
Courbe d'apprentissage technologique
Les fonctionnalités de CI sont fournies avec un certain nombre de technologies de soutien qui peuvent nécessiter que l'équipe investisse dans la courbe d'apprentissage. Il s'agit des systèmes de contrôle de version, de l'infrastructure d'hébergement et des technologies d'orchestration.
Bonnes pratiques de CI
Développement basé sur les tests
Une fois qu'un projet a mis en place un pipeline de CI avec une couverture de test automatique, il est recommandé de développer et d'améliorer cette couverture en continu.Chaque nouvelle fonctionnalité arrivant dans le pipeline de CI devrait être accompagnée d'une série de tests pour s'assurer que le nouveau code se comporte comme prévu.
Le développement basé sur les tests (TDD) désigne une pratique consistant à programmer le code et les cas de test avant de procéder à la programmation des fonctionnalités réelles. Le TDD pur peut impliquer étroitement l'équipe produit pour aider à concevoir une spécification du comportement métier attendu, laquelle peut ensuite être transformée en cas de test. Dans un scénario TDD pur, les développeurs et l'équipe produit se réuniront et discuteront d'une spécification ou d'une liste d'exigences. Cette liste d'exigences sera ensuite convertie en une liste de contrôle des assertions de code. Les développeurs programmeront ensuite le code qui correspond à ces assertions.
Pull requests et revue de code
La plupart des équipes de développement modernes utilisent un workflow fait de pull requests et de revues de code. Les pull requests constituent une pratique essentielle pour une CI efficace. Une pull request est créée lorsqu'un développeur est prêt à merger le nouveau code dans la base de code principale. La pull request informe les autres développeurs du nouvel ensemble de changements prêts pour l'intégration.
Les pull requests constituent une occasion idéale pour lancer le pipeline de CI et exécuter l'ensemble des étapes d'approbation automatisées. Une étape d'approbation manuelle supplémentaire est généralement ajoutée au moment de la pull request, au cours de laquelle un ingénieur non partie prenante effectue une revue de code de la fonctionnalité. Cela permet de passer en revue le nouveau code et les fonctionnalités avec un regard neuf. L'ingénieur non partie prenante fera des suggestions de changements et approuvera ou rejettera la pull request.
Les pull requests et la revue de code constituent un outil puissant pour favoriser la communication et le partage de connaissances passifs au sein d'une équipe d'ingénierie. Cela permet de se prémunir contre la dette technique sous forme de silos de connaissances, c'est-à-dire contre des situations dans lesquelles des ingénieurs spécifiques sont les seules parties prenantes pour certaines fonctionnalités d'une base de code.
Optimiser la vitesse du pipeline
Étant donné que le pipeline de CI sera un processus central et fréquemment utilisé, il est important d'optimiser sa vitesse d'exécution. Tout léger retard dans le workflow de CI s'aggravera de façon exponentielle à mesure que le nombre de nouvelles fonctionnalités, la taille de l'équipe et la taille de la base de code augmentent. Une bonne pratique consiste à mesurer la vitesse du pipeline de CI et à l'optimiser au besoin.
Un pipeline de CI plus rapide permet une boucle de feedback produit accélérée. Les développeurs peuvent rapidement faire un push des changements et expérimenter de nouvelles idées de fonctionnalités pour aider à améliorer l'expérience utilisateur. Tout bug peut être rapidement corrigé et résolu à mesure qu'il est découvert. Cette vitesse d'exécution accrue peut offrir à la fois un avantage sur les autres concurrents et une expérience globale de qualité supérieure à vos clients.
Premiers pas avec l'intégration continue
La dépendance fondamentale de la CI est un système de contrôle de version (VCS). Si la base de code cible pour une installation de CI ne possède pas de VCS, la première étape consiste à en installer un. Dans les bases de code modernes, l'absence de VCS est très improbable. Git, Mercurial et Subversion comptent parmi les VCS populaires.
Une fois le contrôle de version en place, la prochaine étape consiste à trouver une plateforme d'hébergement de contrôle de version.La plupart des outils d'hébergement de contrôle de version modernes disposent d'une prise en charge et de fonctionnalités intégrées pour la CI. Bitbucket, Github et Gitlab comptent parmi les plateformes d'hébergement de contrôle de version populaires.
Une fois le contrôle de version mis en place dans le projet, diverses étapes d'approbation de l'intégration doivent être ajoutées. L'étape d'approbation de l'intégration la plus utile à mettre en place est celle des tests automatisés. L'ajout de tests automatisés à un projet peut entraîner des coûts supplémentaires initiaux. Un framework de test doit être installé. Ensuite, le code et les cas de test doivent être programmés par les développeurs.
Quelques idées d'autres mécanismes d'approbation de CI moins coûteux à ajouter : vérificateurs de syntaxe, formateurs de style de code ou encore analyses de la vulnérabilité des dépendances. Une fois que vous avez mis en place un VCS avec quelques étapes d'approbation de merge, vous avez établi une intégration continue !
La CI n'est pas un processus métier purement technique. Le reste de l'organisation, le marketing, les ventes et les équipes de produit bénéficieront également d'un pipeline de CI. Les équipes de produit devront réfléchir à la manière de paralléliser l'exécution de flux de développement simultanés. Les équipes de produit et d'ingénierie travailleront en étroite collaboration pour déterminer les attentes en matière de fonctionnalités métier admissibles, qui constitueront la suite de tests automatisés.
Le marketing et les ventes pourront se référer au pipeline de CI afin de coordonner les efforts et les événements de communication avec les clients. Grâce à la CI, le reste de l'organisation bénéficie d'un certain niveau de transparence sur l'avancement de l'exécution de l'ingénierie. Cette transparence et cette communication s'intègrent parfaitement dans un workflow de développement de projet Agile.
Conclusion…
Si votre entreprise s'efforce de profiter des avantages d'une approche DevOps ou si elle dispose simplement d'une équipe de développement à plusieurs développeurs, la CI est importante. Grâce à la CI, votre organisation d'ingénierie pourra travailler de façon plus rapide et plus efficace.
La CI est un outil standard dans les organisations de développement modernes ultra efficaces. Les meilleures entreprises possèdent des pipelines de CI robustes et n'hésitent pas à investir davantage dans l'efficacité. Les avantages de la CI ne profitent pas seulement à l'équipe d'ingénierie, mais aussi à l'ensemble de l'organisation.
Il existe de nombreux outils tiers facilitant la gestion et l'installation de la CI. De nombreuses options populaires s'offrent à vous, notamment Codeship, Bitbucket Pipelines, SemaphoreCI, CircleCI, Jenkins, Bamboo, Teamcity et bien d'autres encore. Ces outils possèdent leurs propres guides d'installation détaillés ainsi qu'une documentation pour vous aider à vous lancer.
Essayez certains des meilleurs outils de CI fournis par Atlassian :
Bitbucket Pipelines est un excellent utilitaire pour actualiser un projet avec des fonctionnalités modernes de CI.
Jira est l'un des outils de gestion de projet Agile et DevOps les plus populaires au monde. Il s'intègre étroitement à d'autres projets Bitbucket et, lorsqu'il est associé à un pipeline de CI, il peut offrir un aperçu très transparent de l'état de santé d'une organisation d'un point de vue exécutif.
Thème suivant
Lectures recommandées
Ajoutez ces ressources à vos favoris pour en savoir plus sur les types d'équipes DevOps, ou pour les mises à jour continues de DevOps chez Atlassian.