Intégration continue

Publié le 12 mai 2019, mis à jour le 19 décembre 2023.

L’intégration continue (ou CI, pour Continuous Integration) représente une composante essentielle dans un environnement DevOps et agile. Elle regroupe un ensemble de pratiques visant à accélérer le développement d’une application tout en garantissant la qualité du code.

La philosophie DevOps selon Padok

La philosophie du DevOps, c’est de faire accélérer les développements. Padok s’en est même inspiré pour le choix de son nom. En formule 1, le paddock est la zone où la voiture est paramétrée, réglée, pour être la plus performante possible et permettre au pilote de se concentrer sur ce qu’il sait faire : aller le plus vite possible.

En DevOps, les opérationnels (ou Ops) sont l’équivalent des ingénieurs de pointe qui travaillent sur ces paddocks. Ils agissent sur les machines pour que les développeurs (ou Dev) ne rencontrent plus aucun frein lié à des problématiques d’Ops (des serveurs qui crashent, une pipeline de déploiement incorrecte, un environnement de développement lent, etc…) et puissent se concentrer sur les fonctionnalités à coder.

Qu’est-ce que l’intégration continue ? Comment ça se passe concrètement ?

L’intégration continue est un ensemble de pratiques consistant à tester de manière automatisée chaque révision de code avant de le déployer en production.

Lorsque le développeur code une fonctionnalité, il conçoit également le test associé et ajoute le tout à son dépôt de code. Le serveur d’intégration va ensuite faire tourner tous les tests pour vérifier qu’aucune régression n’a été introduite dans le code source suite à cet ajout. Si un problème est identifié, le déploiement n’a pas lieu et les Dev sont notifiés. Si aucune erreur n’est remontée, le serveur d’intégration peut déployer directement le code en production.

Ainsi, avec l’intégration continue la phase de tests automatisés est complètement intégrée au flux de déploiement.

integration-continue-devops

Qu’apporte l’intégration continue ?

Le principal apport de l’intégration continue est de garantir la mise en production d'un code de qualité, et donc une meilleure satisfaction des utilisateurs finaux. En effet, l'automatisation des tests de tout le code source à chaque ajout/modification de fonctionnalités permet d’éviter l’introduction de régressions en production. Les développeurs peuvent configurer les notifications du serveur d’intégration et ainsi être prévenus sur le service de leur choix en cas d’anomalies (webhook, email, etc…), gagnant ainsi un temps précieux.

En réalité, ce n’est pas la totalité du code qui est testée, car le développement des tests prend du temps. Chez Padok, on considère qu’à partir de 80% on garantit une bonne couverture de test. Mieux vaut avoir les principales fonctionnalités mises à l'épreuves plutôt que toute l’application mal testée.

L’intégration continue permet également aux Dev d’avoir un retour plus rapide sur leur développement. Il n’y a donc plus besoin d’attendre plusieurs semaines pour identifier les erreurs et les corriger.

Enfin l’intégration continue favorise le travail en équipe. Souvent, plusieurs Dev travaillent sur des tâches séparées dans le cadre d’un même projet. Or, plus les équipes sont importantes, plus le risque d’introduire des erreurs lors de l’intégration est élevé.

Et en cas de problème, le débugage peut s’avérer très chronophage. En intégrant les révisions de code quotidiennement, le risque d’erreur est réduit au minimum. Les conflits au sein de l’équipe se font plus rares et les Dev n’ont plus peur de “casser le code” à chaque déploiement.

Quelques outils de l’intégration continue

Différents outilsDevOpspermettent de gérer l’intégration continue, en voici une liste non exhaustive.

Jenkins

Jenkins est un logiciel d'intégration continue gratuit développé en Java. Il fonctionne dans un conteneur web ou en mode autonome avec son propre serveur Web embarqué. Étant open source, Jenkins fédère une vaste communauté qui propose régulièrement de nouvelles améliorations du service. Il est assez simple à installer et plus de 1000 plugins sont disponibles, permettant ainsi de l’intégrer à la plupart des outils de développement, de test et de déploiement.

Travis CI

Travis CI est un logiciel libre d'intégration continue payant publié sous licence MIT. Il permet de compiler, tester et déployer le code source des logiciels développés, notamment en lien avec le service d'hébergement du code source GitHub. Sa configuration se fait en YAML. Travis permet aussi de lancer des tests dans des environnements Docker.

Gitlab CI

Gitlab CI est à Gitlab ce que Travis est à Github : un outil intégré de bout en bout.Trainline témoigne de son passage de Jenkins à Gitlab CI dans cet article.

Bamboo

Bamboo est un logiciel propriétaired’intégration continue développé par Atlassian. Il est payant et son coût dépend du nombre d’agents distants dont vous avez besoin.

TeamCity

TeamCity est un serveur d’intégration continue basé sur la plateforme Java, développé par l’éditeur JetBrains. Il est accessible gratuitement et grâce à une interface Web épurée, il est assez facile à configurer et à utiliser.

Tous ces logiciels proposent des performances assez similaires. Pour choisir le plus adapté, mieux vaut commencer par prendre en compte les compétences de son équipe ou ses équipes en se demandant “Avec quel outils DevOps mes devs sont-ils les plus familiers ?”. Le coût peut aussi venir départager ces différents outils.

L’intégration continue, premier pas vers le déploiement continu ?

L’intégration continue n’est pas un prérequis pour faire du DevOps, c’est plutôt un idéal à atteindre, un premier pas vers le déploiement continu (CD). Les tests automatisés constituent un mur de qualité, certes non exhaustif, mais qui filtre la plupart des régressions s’il est bien conçu. Dev et Ops sont ainsi plus sereins et plus aptes à déployer régulièrement.

Le déploiement continu est une pratique qui consiste à livrer chaque modification apporté au logiciel directement aux utilisateurs finaux. Aucune intervention humaine n’est nécessaire, tout se fait automatiquement. Seuls les changements qui échouent à un test ne sont pas directement déployés en production. Cette pratique permet d’accélérer la boucle de feedbacks, et permet aussi aux dev de se concentrer sur le développement de l’application puisqu’il n’y a plus de date de release à anticiper.

Pour conclure

- L'intégration continue est comme un mur de qualité que le code doit franchir systématiquement avant d'être déployé en production.

-Cette pratique garantit un code de qualité, des utilisateurs finaux satisfaits et des développeurs plus efficaces.

- De nombreux logiciels, parfois gratuits, permettent sa mise en place.

- L'intégration continue est un bon premier pas vers le déploiement continu.

Si vous avez des questions plus précises sur l'intégration continue et le DevOps, nos experts DevOps sont là pour vous accompagner, n'hésitez pas à nous contacter !