7 min lecture • Guide 85 of 877
Implémenter des Workflows d'Intégration Continue
L'Intégration Continue (CI) transforme comment les équipes valident les changements de code en exécutant automatiquement tests, linting et vérifications qualité sur chaque commit. Quand CI s'intègre avec GitScrum via les connexions GitHub, GitLab ou Bitbucket, les statuts de tâches se mettent à jour automatiquement basés sur les résultats de build, donnant à toute l'équipe visibilité sur la santé du code. Cela crée un gate qualité qui empêche le code cassé d'atteindre les branches principales tout en gardant le tableau synchronisé avec l'état réel du développement.
Fondamentaux CI
Pourquoi CI Importe
SANS CI:
┌─────────────────────────────────────────────────────────────┐
│ PROBLÈMES VÉRIFICATION MANUELLE │
├─────────────────────────────────────────────────────────────┤
│ │
│ Développeur push code: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ "Fonctionne sur ma machine" ─────────────────────────────││
│ │ │ ││
│ │ ▼ ││
│ │ ┌───────────────────────────────────────────────────┐ ││
│ │ │ PROBLÈMES DÉCOUVERTS PLUS TARD: │ ││
│ │ │ │ ││
│ │ │ • Version Node différente sur serveur CI │ ││
│ │ │ • Variable environnement manquante │ ││
│ │ │ • Test passe localement, échoue en isolation │ ││
│ │ │ • Conflit merge pas correctement résolu │ ││
│ │ │ • Dépendance pas dans package.json │ ││
│ │ │ │ ││
│ │ │ Temps debug: Heures à jours │ ││
│ │ │ Changement contexte: Déjà sur prochaine tâche │ ││
│ │ │ Blame: "Qui a cassé le build?" │ ││
│ │ └───────────────────────────────────────────────────┘ ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
AVEC CI:
┌─────────────────────────────────────────────────────────────┐
│ FLUX VÉRIFICATION AUTOMATISÉE │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ Push │───▶│ CI Exécute│───▶│ Résultat │ │
│ │ Commit │ │ Checks │ │ en 5min │ │
│ └───────────┘ └───────────┘ └───────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ CHECKS EXÉCUTENT: │ │
│ │ ✓ Installer dépendances │ │
│ │ ✓ Lint code │ │
│ │ ✓ Type check │ │
│ │ ✓ Exécuter tests unitaires │ │
│ │ ✓ Exécuter tests intégration │ │
│ │ ✓ Build artefact production │ │
│ │ │ │
│ │ Tout passe → ✅ Merge autorisé │ │
│ │ Échec → ❌ Merge bloqué │ │
│ └─────────────────────────────────────┘ │
│ │
│ Développeur trouve issue: 5 minutes, pas jours │
│ Contexte: Encore dans même tâche │
│ Responsabilité: Clair quel commit a cassé quoi │
│ │
└─────────────────────────────────────────────────────────────┘
Étapes Pipeline CI
STRUCTURE PIPELINE STANDARD:
┌─────────────────────────────────────────────────────────────┐
│ ÉTAPES PIPELINE │
├─────────────────────────────────────────────────────────────┤
│ │
│ Étape 1: PRÉPARER (1-2 min) │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ • Checkout code ││
│ │ • Cache dépendances ││
│ │ • Installer packages ││
│ │ ││
│ │ Conditions échec: Issues réseau, cache corrompu ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ Étape 2: VALIDER (2-5 min) │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Exécuter en parallèle: ││
│ │ • Lint (ESLint, Prettier, etc.) ││
│ │ • Type check (TypeScript) ││
│ │ • Audit sécurité (npm audit, Snyk) ││
│ │ ││
│ │ Conditions échec: Violations style, erreurs types ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ Étape 3: TESTER (5-15 min) │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Séquentiel: ││
│ │ • Tests unitaires ││
│ │ • Tests intégration ││
│ │ • Tests E2E (optionnel par-PR) ││
│ │ ││
│ │ Conditions échec: Échecs tests, baisse couverture ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ Étape 4: BUILD (2-5 min) │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ • Build artefact production ││
│ │ • Vérifier taille bundle ││
│ │ • Upload artefacts ││
│ │ ││
│ │ Conditions échec: Erreurs build, limites dépassées ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ Étape 5: DEPLOY (sur merge vers main) │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ • Deploy vers staging ││
│ │ • Exécuter smoke tests ││
│ │ • Notifier équipe ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Intégration GitScrum
Connecter Fournisseurs Git
FLUX GITSCRUM + CI:
┌─────────────────────────────────────────────────────────────┐
│ MISES À JOUR AUTOMATIQUES TABLEAU │
├─────────────────────────────────────────────────────────────┤
│ │
│ Setup: GitScrum → Intégrations → GitHub/GitLab/Bitbucket │
│ │
│ WORKFLOW: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ 1. Développeur crée branche: ││
│ │ git checkout -b feature/PROJ-123-user-auth ││
│ │ ^^^^ ││
│ │ ID Tâche ││
│ │ ││
│ │ 2. Développeur ouvre PR référençant tâche: ││
│ │ Titre PR: "feat: implement user auth [PROJ-123]" ││
│ │ ││
│ │ 3. GitScrum automatiquement: ││
│ │ • Lie PR à tâche PROJ-123 ││
│ │ • Affiche statut PR sur carte tâche ││
│ │ • Met à jour tâche basé sur état PR ││
│ │ ││
│ │ 4. CI exécute, résultats visibles dans GitScrum: ││
│ │ ┌─────────────────────────────────────────────────┐ ││
│ │ │ Tâche: PROJ-123 │ ││
│ │ │ │ ││
│ │ │ 🔗 PR #45: feat: implement user auth │ ││
│ │ │ ⏳ CI Exécution: 3 de 5 checks passés │ ││
│ │ │ │ │ ││
│ │ │ ├─ ✅ lint │ ││
│ │ │ ├─ ✅ typecheck │ ││
│ │ │ ├─ ✅ unit-tests │ ││
│ │ │ ├─ ⏳ integration-tests (en cours) │ ││
│ │ │ └─ ⏸️ deploy (en attente) │ ││
│ │ └─────────────────────────────────────────────────┘ ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ Statut CI visible sans quitter tableau GitScrum │
│ │
└─────────────────────────────────────────────────────────────┘
Gates Qualité
Checks Requis
CHECKS BLOQUANTS VS NON-BLOQUANTS:
┌─────────────────────────────────────────────────────────────┐
│ CONFIGURER GATES QUALITÉ │
├─────────────────────────────────────────────────────────────┤
│ │
│ DOIT PASSER (bloque merge): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ✓ Lint Pas erreurs syntaxe, style cohérent ││
│ │ ✓ Type check TypeScript compile sans erreurs ││
│ │ ✓ Tests unitaires Tous tests passent ││
│ │ ✓ Build Build production réussit ││
│ │ ✓ Sécurité Pas vulnérabilités haute/critique ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ DEVRAIT PASSER (avertir mais permettre): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ⚠ Couverture >80% couverture (avertir si moins) ││
│ │ ⚠ Taille bundle <500KB (avertir si plus) ││
│ │ ⚠ Performance Lighthouse >90 (avertir si moins) ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Pratiques Équipe
Discipline CI
ACCORDS CI ÉQUIPE:
┌─────────────────────────────────────────────────────────────┐
│ NORMES CI ÉQUIPE │
├─────────────────────────────────────────────────────────────┤
│ │
│ ✅ FAIRE: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ • Exécuter tests localement avant push ││
│ │ • Corriger builds cassés immédiatement ││
│ │ • Garder pipeline sous 15 minutes ││
│ │ • Réviser changements config CI soigneusement ││
│ │ • Surveiller tests instables hebdomadairement ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ ❌ NE PAS FAIRE: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ • Push direct vers main ││
│ │ • Sauter CI checks "juste cette fois" ││
│ │ • Laisser builds rouges pendant nuit ││
│ │ • Ignorer tests échoués en les sautant ││
│ │ • Merge sans revue de PR ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ PROTOCOLE BUILD CASSÉ: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ 1. Tout travail s'arrête quand main branch est rouge ││
│ │ 2. Personne qui a cassé prend responsabilité ││
│ │ 3. Si pas réparable en 10 min, revert et réparer en brch││
│ │ 4. Poster dans Discussions: ce qui s'est passé, prévenir││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘