Introduction au CI/CD
Table des matières
- Définitions CI/CD
- Intégration Continue (CI)
- Livraison Continue (CD)
- Déploiement Continu
- Anatomie d'un pipeline
- Bonnes pratiques
1 - Définitions CI/CD
Vue d'ensemble
Les trois concepts
| Concept | Définition | Automatisation |
|---|---|---|
| CI | Intégration fréquente du code | Build + Tests |
| Continuous Delivery | Prêt à déployer à tout moment | + Release |
| Continuous Deployment | Déploiement automatique | + Production |
La différence entre Continuous Delivery et Continuous Deployment est une validation manuelle : Delivery attend une approbation, Deployment est entièrement automatique.
🔝 Retour à la table des matières
2 - Intégration Continue (CI)
Le problème sans CI
La solution CI
Les règles de CI
| Règle | Description |
|---|---|
| Commits fréquents | Au moins une fois par jour |
| Build automatique | Déclenché à chaque commit |
| Tests automatiques | Unitaires + Intégration |
| Feedback rapide | < 10 minutes idéalement |
| Fix immédiat | Build cassé = priorité #1 |
Un build cassé bloque toute l'équipe. Le corriger est la priorité absolue. Pas de "je verrai plus tard".
Pipeline CI typique
Avantages de CI
- Détection précoce des bugs
- Réduction des conflits de merge
- Code toujours dans un état déployable
- Feedback rapide aux développeurs
- Confiance dans le code
🔝 Retour à la table des matières
3 - Livraison Continue (CD)
Extension de CI
La livraison continue étend CI en s'assurant que le code peut être déployé à tout moment.
Environnements
| Environnement | Usage |
|---|---|
| Development | Tests locaux, expérimentation |
| Testing/QA | Tests automatisés, validation |
| Staging | Miroir de production, tests finaux |
| Production | Utilisateurs réels |
Pratiques clés
- Déploiements identiques : même processus pour tous les environnements
- Configuration externalisée : variables d'environnement
- Database migrations : versionn ées et automatisées
- Feature flags : activer/désactiver les fonctionnalités
🔝 Retour à la table des matières
4 - Déploiement Continu
Au-delà de la livraison
Le déploiement continu supprime la validation manuelle : chaque changement validé va automatiquement en production.
Prérequis
| Prérequis | Raison |
|---|---|
| Tests exhaustifs | Filet de sécurité |
| Monitoring robuste | Détection rapide |
| Rollback automatique | Récupération rapide |
| Feature flags | Contrôle de l'exposition |
| Culture de qualité | Responsabilité partagée |
Le déploiement continu sans tests exhaustifs est une recette pour le désastre. Assurez-vous d'avoir une couverture de tests suffisante avant de l'implémenter.
Comparaison des approches
🔝 Retour à la table des matières
5 - Anatomie d'un pipeline
Structure d'un pipeline
Exemple de fichier pipeline
GitHub Actions :
name: CI/CD Pipeline
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm run build
test:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm test
deploy:
needs: test
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- name: Deploy to production
run: echo "Deploying..."
Jobs parallèles vs séquentiels
Parallélisez les jobs indépendants pour réduire le temps total du pipeline.
Artifacts et cache
| Concept | Usage |
|---|---|
| Artifact | Résultat d'un job (JAR, image Docker) |
| Cache | Dépendances réutilisables (node_modules) |
| Workspace | Fichiers partagés entre jobs |
🔝 Retour à la table des matières
6 - Bonnes pratiques
Les 10 commandements CI/CD
| # | Pratique |
|---|---|
| 1 | Maintenir un seul repository source |
| 2 | Automatiser le build |
| 3 | Rendre le build auto-testant |
| 4 | Commit fréquent sur mainline |
| 5 | Build à chaque commit |
| 6 | Garder le build rapide |
| 7 | Tester dans un clone de production |
| 8 | Rendre les artifacts accessibles |
| 9 | Visibilité sur le processus |
| 10 | Automatiser le déploiement |
Pipeline rapide
Objectif : feedback en moins de 10 minutes. Au-delà, les développeurs perdent le contexte de leur changement.
Trunk-based development
Pratique recommandée :
- Branches de courte durée (< 1 jour)
- Merge fréquent vers main
- Feature flags pour le code incomplet
Gestion des secrets
| Méthode | Exemple |
|---|---|
| Variables d'environnement | GitHub Secrets |
| Vault | HashiCorp Vault |
| Cloud KMS | AWS Secrets Manager |
Ne jamais commiter de secrets dans le code. Utilisez toujours des variables d'environnement ou un gestionnaire de secrets.
🔝 Retour à la table des matières
Points clés à retenir
- CI : intégration fréquente avec build et tests automatiques
- Continuous Delivery : prêt à déployer, validation manuelle
- Continuous Deployment : déploiement automatique en production
- Un pipeline rapide (< 10 min) est essentiel
- Les tests automatisés sont le filet de sécurité
- Feature flags permettent de découpler déploiement et release
🔝 Retour à la table des matières
← Chapitre précédent | Chapitre suivant : Panorama des Outils →