La méthodologie CI/CD a fortement aidé à accélérer la création et la mise à jour de vastes applications. Comment est-elle née et en quoi consiste-t-elle ?
au sommaire
Amazon, Facebook, TripAdvisor, Netflix… Tous ces sites sont mis à jour en permanence, souvent même plusieurs fois par jour, avec la contribution d’innombrables développeurs. Le résultat de telles modifications est intégré très rapidement sans que l’internaute n’en ait conscience. À une échelle plus habituelle, les applications déployées et mises à jour dans les entreprises sont le fruit de nombreux développeurs dont la production est coordonnée comme il se doit.
Comment parvient-on à coordonner ainsi les apports de tant de contributeurs ? Grâce à une démarche qui aide à accélérer le déploiement effectif d’applications. Elle consiste en une série d’étapes regroupées sous l’appellation CI/CD (Continuous Integration/Continuous Deployment, ou intégration continue/déploiemement continu en français).
Voir aussi : Les meilleurs VPN du moment
Une petite métaphore
Pour mieux se représenter comment fonctionne CI/CD, tentons un parallèle avec le monde réel. Imaginons la construction d’un vaste hôtel dans un quartier touristique fort concurrentiel, nécessitant que le service client soit à tout moment optimal. Certaines tâches vont être attribuées aux décorateurs, d’autres aux responsables de la plomberie, d’autres aux électriciens…
Lorsqu’une chambre est achevée, il importe qu’elle puisse être opérationnelle au plus vite. Si la coordination n’a pas été effectuée comme il se doit, le mobilier de salle de bains ne va pas correspondre aux installations de plomberie, le logiciel de gestion de l’ouverture des portes est incompatible avec Apple Pay, etc.
Imaginons à présent que la construction ait été gérée en mode CI/CD. Tous les points nécessitant une coordination ont été élaborés en amont. Le CI assure que chaque fois qu’un élément est ajouté, un robot va tester son adéquation avec l’ensemble. Puis, dès lors qu’il apparaît qu’une chambre est fonctionnelle, le CD se charge de faire en sorte qu’elle puisse être occupée.
Par la suite, les touristes qui occupent l’hôtel vont faire remonter des remarques et celles-ci vont être prises en compte, par exemple, la nécessité de modifier la décoration de certaines chambres. Une phase de CI va alors redémarrer et suivre le même parcours jusqu’au CD.
Les affres du développement en silo
Revenons au monde de l’informatique. La taille de nombreuses applications actuelles, qu’il s’agisse de sites Web, de jeux vidéo ou de gestion d’un parc d’outils en location, implique de faire travailler de nombreux développeurs en simultané. Certains peuvent être présents dans l’entreprise et d’autres intervenir à distance.
Traditionnellement, le souci s’est posé dès lors qu’il fallait intégrer ces divers apports en un même programme. Il s’avérait alors que le module de calcul de la TVA développé par Jane, par exemple, n’était pas adapté à l’interface de paiement en ligne créée par Benjamin. Ajuster ces multiples apports créés de manière isolée (l’expression couramment employée était « développés en silo ») pouvait représenter un infernal casse-tête.
Le manifeste pour un développement agile
En février 2001, 17 grands experts du développement se sont réunis à Snowbird, une ville située dans l’ouest des États-Unis, afin d’évoquer cette situation et de la résoudre. Le fruit de leurs réflexions a abouti à un document Le Manifeste pour un développement de logiciel agile. Plusieurs principes ont été posés :
- rendre le développement flexible ;
- optimiser la collaboration entre les développeurs ;
- faciliter les changements rapides dans le code ;
- pouvoir opérer des tests en automatique sur ledit code.
Ce manifeste a entraîné l’essor du DevOps, soit une ingénierie visant à unifier le développement de logiciels. Et au sein du DevOps sont apparues diverses solutions de CI/CD...
Le principe du CI ou intégration continue
CI est traduit par « intégration continue ». Son principe est le suivant : chaque fois qu’un changement intervient dans un projet informatique, il faut qu’il puisse être automatiquement testé afin de vérifier qu’il fonctionne élégamment avec l’intégralité de l’application.
Pour ce faire, une application est décomposée en un grand nombre de micro-services lesquels peuvent être développés et mis au point indépendamment, mais tout en respectant une série de règles qui vont assurer leur coordination.
À partir de là, de nombreux développeurs opèrent simultanément sur différentes fonctions d'une même application.
Un dépôt central
Avec l’intégration continue, à tout moment, les développeurs vont se servir d’un outil de SCM (source code management ou gestion de code source, en français) tel que Gitlab pour placer le code source qu’ils ont développé vers un dépôt central : le dépôt SCM.
Depuis le dépôt SCM, le nouveau code source est acheminé à un serveur d’intégration où il va être compilé (traduit en langage machine), puis fusionné à l’application globale ; suite à quoi, une série de tests sont effectués en automatique par un service tel que Jenkins afin de vérifier qu’aucune anomalie ne puisse être introduite dans le système existant.
Si tout se passe bien, le code validé est archivé dans un Repository (dépôt). En revanche, si des problèmes sont détectés, le développeur doit alors revoir sa copie.
CD ou distribution continue
Une fois que l’étape du CI s’est déroulée de façon réussie, le nouveau « build » (la nouvelle version) de l’application peut normalement être mise en service. Ainsi, s’il s’agit d’un site Web, une nouvelle version peut être proposée aux internautes. Cette étape s’intitule CD ou distribution/déploiement continu. Pourtant, le déploiement effectif n’est pas immédiat. Le CD démarre par une nouvelle série de tests :
- des tests automatisés dit de « recette », par exemple un outil tel que Selenium Webdriver aide à tester la conformité d’un site sur divers navigateurs ;
- des tests de qualité ;
- des tests de performance afin de vérifier que les mises à jour de l’application ne dégradent pas les temps d’accès.
Le nouveau « build » est ainsi soumis à une série de scénarios à même de tester divers types d’usage et vérifier que cette mouture va répondre aux plus hautes exigences. Si le « build » a franchi avec succès toutes ces étapes, il est alors déployé de manière effective.
Une efficacité décuplée
Nous l’avons vu plus haut, CI/CD est une partie intégrante du DevOps, soit une façon de travailler de manière collaborative dans le développement de logiciels. Cette position de chef d’orchestre est devenue cruciale, et elle est fort recherchée, ce qui explique pourquoi tant d’informaticiens peuvent souhaiter se spécialiser dans le DevOps. Retenons que le CI/CD a permis d'augmenter très fortement la fréquence de déploiement des applications grâce à ces divers systèmes de tests automatisés. À l'aide de ces outils liés à cette approche, une modification apportée par un développeur peut devenir effective très rapidement, parfois au bout de quelques minutes !