graph TB
A[👨💻 Développeur] --> B[📦 Git Repository]
B --> C[⚙️ Build Server]
C --> D[🧪 Test Env]
C --> E[📊 Quality Platform]
C --> F[📚 Artifact Registry]
F --> G[🐳 Image Registry]
G --> H[☸️ Kubernetes]
H --> I[🚀 Production]
style B fill:#A8D5E2,color:#000
style C fill:#B4E7A0,color:#000
style E fill:#FFD6A5,color:#000
style F fill:#E8B4E8,color:#000
style G fill:#E8F4F8,color:#000
style H fill:#A8D5E2,color:#000
CI/CD : Écosystème et Infrastructure
Vue d’ensemble : Les composants d’un système CI/CD
Au-delà du simple pipeline : un écosystème complet
7 composants essentiels
- Repository Git - Source de vérité
- Build Server - Orchestrateur
- Test Environments - Validation
- Quality Platform - Gardien
- Artifact Registry - Binaires
- Image Registry - Conteneurs
- Infra Deployment - Cible
Objectif : Comprendre le rôle et les outils de chaque composant
L’architecture moderne CI/CD
La vision complète : Du code à la production
%%{init: {
"theme": "base",
"themeVariables": {
"background": "#F7F9FC",
"primaryTextColor": "#2F2F2F",
"lineColor": "#B8C4CC",
"fontFamily": "Inter, Arial"
}
}}%%
graph LR
subgraph S1["📦 Source Control"]
A[GitHub<br/>GitLab<br/>Bitbucket]
end
subgraph S2["⚙️ CI/CD Platform"]
B[GitHub Actions<br/>GitLab CI<br/>Jenkins]
C[SonarQube<br/>Snyk]
end
subgraph S3["📚 Artifact Storage"]
D[Nexus<br/>Artifactory]
E[Docker Hub<br/>Harbor<br/>ECR]
end
subgraph S4["🚀 Deployment"]
F[Kubernetes<br/>ECS<br/>Azure AKS]
end
A -->|Push| B
B -->|Analyze| C
B -->|Store| D
D -->|Build| E
E -->|Deploy| F
%% Classes pour les nœuds
classDef sourceControl fill:#CDE7F0,stroke:#9FC7D8,stroke-width:2px,color:#2F2F2F
classDef cicd fill:#DFF2E1,stroke:#A8D5B5,stroke-width:2px,color:#2F2F2F
classDef quality fill:#FFF1D6,stroke:#E5CFA3,stroke-width:2px,color:#2F2F2F
classDef artifacts fill:#F5E6FF,stroke:#D4B8E8,stroke-width:2px,color:#2F2F2F
classDef images fill:#E6F7FF,stroke:#B8DCF0,stroke-width:2px,color:#2F2F2F
classDef deploy fill:#E8F5E9,stroke:#B8D8BA,stroke-width:2px,color:#2F2F2F
%% Application des classes
class A sourceControl
class B cicd
class C quality
class D artifacts
class E images
class F deploy
%% Styling des subgraphs
style S1 fill:#EEF7FB,stroke:#9FC7D8,stroke-width:2px
style S2 fill:#EFF9F1,stroke:#A8D5B5,stroke-width:2px
style S3 fill:#FFF7E6,stroke:#E5CFA3,stroke-width:2px
style S4 fill:#F0F8F0,stroke:#B8D8BA,stroke-width:2px
Les composants essentiels
Repository Git : La source de vérité
Single Source of Truth : Tout part du code
Rôle central
graph TB
A[Git Repository] --> B[Code source]
A --> C[Configuration]
A --> D[Infrastructure]
A --> E[Documentation]
A --> F[Pipelines CI/CD]
B --> G[Triggers CI/CD]
C --> G
D --> G
F --> G
style A fill:#A8D5E2,color:#000
style G fill:#B4E7A0,color:#000
Fonctionnalités essentielles
✅ Gestion des branches & protection ✅ Pull/Merge Requests + code review ✅ Webhooks (déclenchement pipelines) ✅ RBAC & permissions granulaires
🔧 Plateformes Git
GitHub - SaaS + Enterprise - Actions CI/CD intégré - Communauté énorme - Usage : Open source, startups
GitLab - SaaS + Self-hosted gratuit - DevOps Platform complète - CI/CD natif puissant - Usage : Entreprises, on-premise
Bitbucket - Intégration Atlassian (Jira) - Pipelines CI/CD - Usage : Équipes Atlassian
Serveur de build : Orchestration des pipelines
Le chef d’orchestre de votre CI/CD
graph TB
A[Git Event] --> B[Build Server]
B --> C[Schedule Jobs]
C --> D[Runner 1<br/>Build]
C --> E[Runner 2<br/>Test Unit]
C --> F[Runner 3<br/>Test IT]
D & E & F --> G[Aggregate Results]
G --> H[Notifications]
G --> I[Store Artifacts]
style B fill:#B4E7A0,color:#000
style D fill:#E8F4F8,color:#000
style E fill:#E8F4F8,color:#000
style F fill:#E8F4F8,color:#000
Responsabilités
🎯 Orchestration (scheduler, dépendances) ⚙️ Exécution (runners, parallélisation) 📊 Reporting (logs, métriques, notifications)
🔧 Plateformes CI/CD
GitHub Actions - Intégré GitHub - YAML simple, marketplace - Usage : Projets GitHub
GitLab CI - Intégré GitLab - Puissant, flexible - Usage : Workflow DevOps complet
Jenkins - Open source, extensible - Plugins pour tout - Usage : Legacy, on-premise complexe
CircleCI / Travis CI - SaaS, config simple - Usage : Startups, projets open source
Environnements de test : Isolation et reproductibilité
Tester dans les bonnes conditions
Types d’environnements
Environnements de test:
Unit Tests:
- JVM isolée
- Mocks/Stubs
- Pas de dépendances
Integration Tests:
- Base de données
- Message broker
- Services externes
E2E Tests:
- Application complète
- Frontend + Backend
- Données réalistesSolutions modernes
🐳 TestContainers
- DB dans Docker
- Éphémère et propre
- Même version que prod
☸️ Preview Environments
- K8s namespace par PR
- URL unique
- Auto-cleanup
🌐 Service Virtualization
- Mock APIs externes
- Contrôle des scénarios
- Pas de dépendances
Plateforme de qualité : Gardien du code
La qualité comme prérequis, pas comme option
graph TB
A[Code] --> B[Build Server]
B --> C{Quality<br/>Gate}
C -->|✅ Pass| D[Continue Pipeline]
C -->|❌ Fail| E[Block Pipeline]
C --> F[SonarQube<br/>Server]
F --> G[Code Analysis]
F --> H[Coverage Report]
F --> I[Security Scan]
F --> J[Technical Debt]
style C fill:#FFD6A5,color:#000
style D fill:#C5E1A5,color:#000
style E fill:#FFD6A5,color:#000
style F fill:#4A90E2
Analyses effectuées
📊 Code Quality (bugs, smells, complexité) 🧪 Test Coverage (lignes, branches) 🔒 Security (CVE, OWASP, secrets) 📈 Trends (dette technique)
🔧 Outils de qualité
SonarQube - Leader du marché - Self-hosted ou Cloud - Quality Gates - Usage : Toutes tailles d’équipe
Snyk - Focus sécurité (deps, code, containers) - Auto-fix PRs - Usage : Security-first teams
CodeClimate - SaaS simple - Maintenabilité focus - Usage : Startups, open source
Trivy - Open source - Scan containers + IaC - Usage : CI/CD security scans
Registre d’artefacts : Stockage des binaires
Stocker les résultats du build de manière persistante
Qu’est-ce qu’un artefact ?
graph LR
A[Maven Build] --> B[JAR/WAR]
C[NPM Build] --> D[.tgz]
E[Go Build] --> F[binary]
B & D & F --> G[Artifact<br/>Registry]
G --> H[Versioned<br/>Storage]
G --> I[Metadata]
G --> J[Dependencies]
style G fill:#BD10E0
Types : JAR/WAR, npm, wheels, binaries, NuGet
Bénéfices : Traçabilité, reproductibilité, partage, cache
🔧 Registres d’artefacts
Sonatype Nexus - Repository manager mature - Multi-format (Maven, npm, PyPI…) - Open source disponible - Usage : Entreprises, on-premise
JFrog Artifactory - Universal artifact repository - Cloud-native - 30+ formats - Usage : Cloud, scaling
GitHub Packages - Intégré GitHub - Zéro configuration - Usage : Projets GitHub
Registre d’images : Hub des conteneurs
Stocker et distribuer les images Docker
graph TB
A[Dockerfile] --> B[docker build]
B --> C[Image:<br/>myapp:v1.2.3]
C --> D[docker push]
D --> E[Container<br/>Registry]
E --> F[Dev K8s]
E --> G[Staging K8s]
E --> H[Prod K8s]
style E fill:#00D9FF
style F fill:#E8F4F8
style G fill:#F39C12
style H fill:#27AE60
Caractéristiques : Tags versionnés, scan vulnérabilités, image signing, layers partagés
🔧 Registres d’images
Docker Hub - Registre public par défaut - Bibliothèque énorme - Usage : Images publiques, dev
Harbor - Open source self-hosted - Vulnerability scan intégré - RBAC avancé - Usage : Entreprises, on-premise
AWS ECR / GCP Artifact Registry - Managed cloud - Intégration native IAM - Scan automatique - Usage : Apps cloud (AWS/GCP)
Infrastructure de déploiement : Pourquoi Kubernetes ?
L’orchestrateur de conteneurs devenu standard
Avant Kubernetes
graph TB
A[Docker Image] --> B{Où déployer?}
B --> C[Serveur 1<br/>Manuel]
B --> D[Serveur 2<br/>Manuel]
B --> E[Serveur 3<br/>Manuel]
C --> F[❌ Pas de HA]
D --> F
E --> F
F --> G[❌ Scaling manuel]
G --> H[❌ Rollback complexe]
style F fill:#E74C3C
style G fill:#E74C3C
style H fill:#E74C3C
Avec Kubernetes
graph TB
A[Docker Image] --> B[K8s API]
B --> C[Deployment]
C --> D[ReplicaSet]
D --> E[Pod 1]
D --> F[Pod 2]
D --> G[Pod 3]
H[Service] --> E & F & G
I[Ingress] --> H
style B fill:#326CE5
style D fill:#7ED321
✅ Auto-scaling ✅ Self-healing ✅ Rolling updates ✅ Rollback 1-click
Orchestrateurs : Kubernetes, Docker Swarm, Docker Compose
Gérer le déploiement et le scaling des conteneurs
Kubernetes
☸️ Production
✅ Feature-rich ✅ Écosystème énorme ✅ Multi-cloud ✅ Auto-scaling ✅ Self-healing ✅ GitOps ready
❌ Complexité ❌ Courbe apprentissage
Market share : ~85%
Managed : - EKS (AWS) - GKE (Google) - AKS (Azure)
Usage : Production, toutes échelles
Docker Swarm
🐳 Petites équipes
✅ Simple setup ✅ Intégré Docker ✅ Courbe apprentissage douce ✅ Suffisant PME
❌ Moins de features ❌ Écosystème limité ❌ Pas de GitOps natif
Market share : ~5%
Usage : - Petites apps/équipes - Migration depuis Compose - Quand K8s est overkill
Docker Compose
🛠️ Dev / Prototypage
✅ Fichier YAML simple ✅ Démarrage instantané ✅ Idéal environnement local ✅ Reproductibilité dev
❌ Single-host uniquement ❌ Pas de HA ❌ Pas pour production
Usage : - Développement local - Prototypage rapide - CI/CD (tests IT) - Démo/proof-of-concept
⚠️ Non recommandé en production
Solutions intégrées vs Best-of-breed
Deux philosophies d’architecture CI/CD
🏢 All-in-One (Integrated)
graph TB
A[GitLab Platform] --> B[Git]
A --> C[CI/CD]
A --> D[Registry]
A --> E[Security]
A --> F[K8s Deploy]
A --> G[Monitoring]
style A fill:#FC6D26
Exemples : - GitLab DevOps Platform - Azure DevOps - JFrog Platform - Atlassian Stack
Avantages : ✅ Intégration native ✅ Single UI/UX ✅ Un seul vendor ✅ Setup rapide ✅ Support unifié
Inconvénients : ❌ Vendor lock-in ❌ Moins flexible ❌ Pas toujours “best tool”
🔧 Best-of-Breed (Composable)
graph TB
A[GitHub] --> B[Git]
C[Jenkins] --> D[CI/CD]
E[Nexus] --> F[Artifacts]
G[Harbor] --> H[Images]
I[Kubernetes] --> J[Deploy]
K[Prometheus] --> L[Monitoring]
B --> D
D --> F
F --> H
H --> J
J --> L
Approche : Meilleur outil pour chaque fonction
Avantages : ✅ Meilleur de chaque catégorie ✅ Flexibilité maximale ✅ Portable (multi-cloud) ✅ Éviter vendor lock-in
Inconvénients : ❌ Intégration complexe ❌ Multiple vendors ❌ Maintenance ++ ❌ Courbe apprentissage
Tout est conteneurisé
Un écosystème moderne CI/CD s’appuie largement sur des conteneurs : runners, environnements de test, outils de qualité, artefacts et infra déclarative.
Runners / agents CI (conteneurs)
- Scalables et éphémères
- Isolation des builds
- Démarrage rapide
Environnements de test éphémères
- TestContainers, namespaces K8s par PR
- Reproductibilité des scénarios
- Nettoyage automatique
Outils de qualité conteneurisés
- SonarQube, Snyk, Trivy
- Scans CI intégrés (SAST/SCA)
- Rapports et Quality Gates
Applications déployées en conteneurs
- Images versionnées et signées
- Tags par environnement (dev/pr/staging/prod)
- Scan vulnérabilités avant push
Infrastructure as Code (IaC) + conteneurs
- Terraform / Helm / Kustomize
- Déploiement déclaratif et reproductible
- Intégration avec GitOps pour la synchronisation