CI/CD : les principes
Ce cours ouvre le chapitre Livrer. Il s'adresse à toute personne qui travaille sur du logiciel en équipe, développeur, administrateur, responsable technique, et qui entend parler de CI/CD sans savoir précisément ce que le terme recouvre, ou qui utilise déjà un outil (GitHub Actions, GitLab CI, Jenkins) sans en connaître les principes. Il ne suppose aucune expérience de ces outils, mais une aisance avec Git (branches, fusion) et avec docker run.
L'approche
Les outils de CI/CD changent tous les cinq ans ; les principes sur lesquels ils reposent datent des années 1990 et n'ont presque pas bougé. Ce cours enseigne donc les principes, sans dépendre d'un produit : à la leçon 2, vous construisez vous-même un petit serveur d'intégration continue, avec un dépôt Git, un crochet de quelques dizaines de lignes et Docker. Il est volontairement minimal, et c'est ce qui le rend instructif : chaque fonction d'un vrai outil (agents jetables, journaux, artefacts, secrets, promotion entre environnements) y est ajoutée à la main, au moment où l'on en a besoin, et l'on voit ce qu'elle coûte et ce qu'elle protège.
L'application qui sert d'exemple est Signalements, la petite API Flask des cours Docker : les fondamentaux et Construire des images de conteneurs. Les cours suivants du chapitre (GitHub Actions, GitOps avec Argo CD) reprennent ces principes avec des outils de production.
Ce qu'il faut installer
- Git 2.38 ou plus récent (la leçon 1 utilise
git merge-tree --write-tree). - Docker Engine, comme dans les cours précédents.
- Aucun compte chez un fournisseur : tout tourne sur votre machine.
Plan du cours
- Intégrer en continu
100 Comprendre
L'intégration continue est une pratique d'équipe avant d'être un outil : intégrer chaque jour dans une branche commune, vérifier automatiquement le résultat, réparer immédiatement. Démonstration d'une fusion Git sans conflit qui casse pourtant l'application. - Anatomie d'un pipeline
100 Comprendre
Déclencheur, définition versionnée, agent, espace de travail jetable, étapes, codes de sortie, journaux, artefacts, cache et statut : chaque pièce d'un pipeline, montrée en construisant un serveur d'intégration continue de cinquante lignes avec Git et Docker. - Tests et qualité dans le pipeline
100 Comprendre
Quelles vérifications mettre dans un pipeline, dans quel ordre, et comment garder un retour rapide et fiable : analyse statique, tests unitaires, tests d'intégration contre un vrai PostgreSQL éphémère, couverture, et chasse aux tests instables. - Livraison continue et déploiement continu
100 Comprendre
Prolonger le pipeline jusqu'à la production : construire l'artefact une seule fois, l'identifier par son empreinte, le tester tel qu'il sera livré, le déployer automatiquement en recette, le promouvoir en production d'un geste, et revenir en arrière en quelques secondes. - Sécuriser le pipeline
100 Comprendre
Un pipeline exécute du code à la demande de ses contributeurs et détient les clés de la production : c'est une cible. Les risques, du plus courant au plus grave, et les défenses qui les réduisent, mises en œuvre sur notre serveur : moindre privilège, secrets jamais exposés aux branches et masqués dans les journaux, actions épinglées par empreinte, exécution de demande de fusion isolée. - Mesurer : les indicateurs DORA
100 Comprendre
Savoir si un pipeline rend vraiment service : les indicateurs DORA (fréquence de déploiement, délai de livraison, taux d'échec des changements, délai de rétablissement, taux de reprise), calculés pour de vrai depuis un journal de déploiements, et comment ne pas les transformer en pièges.
Sources
- Martin Fowler, Continuous Integration (réécrit en 2023, révisé en 2024)
- Jez Humble, David Farley, Continuous Delivery (Addison-Wesley, 2010)
- DORA, capacités techniques et indicateurs de performance de livraison
- Software Engineering at Google, chapitre 23 : Continuous Integration
- OWASP, Top 10 CI/CD Security Risks