
Les guides expliquent comment GitLab CI/CD fonctionne. Les labs vous font pratiquer. Pipeline Craft est une série de 26 exercices progressifs sur un vrai projet Python (FastAPI). Vous forkez le dépôt, vous écrivez du YAML, vous poussez, vous voyez le résultat — pipeline vert ou rouge, à vous de diagnostiquer. Chaque lab cible une compétence précise de la formation GitLab CI/CD.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Écrire des pipelines GitLab CI/CD de zéro sur un projet réel
- Diagnostiquer des pipelines cassés en lisant les logs et le YAML
- Optimiser avec cache, artifacts, DAG et parallélisme
- Industrialiser avec templates, includes et CI/CD Components
- Sécuriser les secrets, scanner le code et les images Docker
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »Les labs complètent les guides théoriques. Ils sont utiles quand :
- Vous venez de lire un guide et voulez ancrer la compétence par la pratique
- Vous préparez la certification GitLab CI/CD Associate et avez besoin d’exercices
- Vous formez une équipe et cherchez des TP prêts à l’emploi
- Vous voulez un projet fil rouge qui évolue de lab en lab
Le projet fil rouge
Section intitulée « Le projet fil rouge »Tous les labs s’appuient sur Pipeline Craft, une API REST écrite en Python (FastAPI) avec :
- 6 endpoints (
/health,/version,/itemsCRUD) - Des tests unitaires (pytest)
- Un linter (ruff)
- Un Dockerfile multi-stage
- Un script de déploiement simulé
Le code est volontairement simple — c’est le pipeline qui est au centre de chaque exercice.
Comment ça marche
Section intitulée « Comment ça marche »Le dépôt Pipeline Craft est hébergé sur gitlab.com. Il contient le code Python de l’API et toutes les branches des labs. Le principe : vous créez votre propre copie du dépôt (un fork), puis vous travaillez sur les branches de départ de chaque lab.
Étape 1 — Forkez le dépôt (une seule fois)
Section intitulée « Étape 1 — Forkez le dépôt (une seule fois) »Un fork crée une copie du dépôt dans votre propre espace GitLab. Vous y êtes propriétaire, vous pouvez y pousser du code et voir vos propres pipelines s’exécuter.
-
Ouvrez le dépôt original
Rendez-vous sur gitlab.com/Bob74/pipeline-craft.
-
Cliquez sur Fork (bouton en haut à droite)
Gardez les paramètres par défaut (votre namespace personnel, visibilité publique) et cliquez sur Fork project.
-
Résultat
Vous avez maintenant votre propre dépôt à l’adresse
gitlab.com/<votre-pseudo>/pipeline-craft. C’est là que vous travaillerez pour tous les labs.
Étape 2 — Clonez votre fork en local
Section intitulée « Étape 2 — Clonez votre fork en local »# Remplacez <votre-pseudo> par votre nom d'utilisateur GitLabgit clone https://gitlab.com/<votre-pseudo>/pipeline-craft.gitcd pipeline-craftVous récupérez le dépôt sur votre machine. Toutes les branches sont disponibles — tapez git branch -r pour les voir.
Étape 3 — Passez sur la branche de départ du lab
Section intitulée « Étape 3 — Passez sur la branche de départ du lab »Chaque lab a une branche starter (point de départ) et une branche solution (correction) :
# Exemple pour le Lab 01git checkout starter/lab-01La branche starter/lab-XX contient l’état exact du projet au début du lab : parfois un pipeline cassé (Lab 02), parfois un pipeline fonctionnel mais sans optimisation (Lab 04), parfois aucun pipeline du tout (Lab 01).
Étape 4 — Codez, poussez, vérifiez
Section intitulée « Étape 4 — Codez, poussez, vérifiez »Suivez les instructions du lab, modifiez les fichiers demandés, puis :
git add -Agit commit -m "ci: solution lab XX"git push origin starter/lab-XXAllez dans Build > Pipelines sur votre projet GitLab pour voir le résultat. Pipeline vert ? Bravo, passez au lab suivant.
Si vous bloquez
Section intitulée « Si vous bloquez »La branche solution/lab-XX contient la correction complète. Comparez votre travail :
# Voir ce qui diffère entre votre branche et la solutiongit diff starter/lab-XX..solution/lab-XXOu basculez directement sur la solution pour observer le résultat attendu :
git checkout solution/lab-XXRésumé visuel
Section intitulée « Résumé visuel »gitlab.com/Bob74/pipeline-craft ← dépôt original (ne pas modifier) │ ▼ Fork (une seule fois)gitlab.com/<vous>/pipeline-craft ← votre copie (vous y poussez) │ ▼ git clone (une seule fois)~/pipeline-craft/ ← votre copie locale │ ├── git checkout starter/lab-01 ← point de départ du lab ├── … codez, committez, poussez … └── git checkout solution/lab-01 ← correction si besoinLes 26 labs
Section intitulée « Les 26 labs »Bloc 1 — Fondamentaux (Labs 01–11)
Section intitulée « Bloc 1 — Fondamentaux (Labs 01–11) »Du premier pipeline à un pipeline complet avec validation, registries, rapports qualité et diagnostic avancé.
| Lab | Titre | Compétence | Guide lié |
|---|---|---|---|
| 01 | Mon premier pipeline | Écrire un .gitlab-ci.yml à 3 stages | Premier pipeline |
| 02 | Lire un échec | Diagnostiquer un job rouge via les logs | Debug logs |
| 03 | Images et runners | Choisir les bonnes images, configurer Docker-in-Docker | Runners |
| 04 | Artifacts et cache | Transmettre des fichiers entre jobs, accélérer le pipeline | Artifacts et cache |
| 05 | Sortir les secrets du code | Variables CI/CD protégées, masquage, .env.example | Variables |
| 06 | Contrôler l’exécution | rules:, workflow: rules, déploiement conditionnel | Rules |
| 07 | Valider un pipeline | glab ci lint, CI Lint UI, pré-validation locale | Valider un .gitlab-ci.yml |
| 08 | Déclencher un pipeline | Schedules, trigger tokens, API, $CI_PIPELINE_SOURCE | Déclencheurs |
| 09 | Publier dans le registry | Container Registry, Package Registry, tags sémantiques | Registries |
| 10 | Rapports qualité | JUnit, coverage, badge, Code Quality dans les MR | Rapports qualité |
| 11 | Débugger un job bloqué | Diagnostic pending/skipped, tags runner, workflow: rules | Debug pending, Debug skipped |
Bloc 2 — Industrialisation (Labs 12–19)
Section intitulée « Bloc 2 — Industrialisation (Labs 12–19) »Cache avancé, DRY, templates, parallélisme, DAG et pipelines parent/enfant.
| Lab | Titre | Compétence | Guide lié |
|---|---|---|---|
| 12 | Accélérer le pipeline | Cache hashfiles, images slim, needs:, multi-stage Docker | DAG et parallélisme, Services CI et cache |
| 13 | DRY : extends et anchors | Factoriser le YAML avec extends: et ancres | Extends et anchors |
| 14 | Templates partagés | include: local, project, remote, template | Templates |
| 15 | Matrices multi-versions | parallel:matrix pour tester Python 3.11/3.12 | Matrices |
| 16 | Pipeline parent-enfant | trigger:include, pipelines dynamiques | Parent-enfant, Dynamique |
| 17 | Workflows branches et MR | MR pipelines, merge trains, release flow | Workflows |
| 18 | Fiabilité et retry | retry:, timeout:, interruptible:, resource_group: | Fiabilité |
| 19 | Capstone industriel | Reconstruire un pipeline complet (cahier des charges) | Synthèse pipeline, Capstone |
Bloc 3 — Sécurité (Labs 20–26)
Section intitulée « Bloc 3 — Sécurité (Labs 20–26) »Secrets, scanning, SBOM, branches protégées, durcissement et examen final.
| Lab | Titre | Compétence | Guide lié |
|---|---|---|---|
| 20 | Protéger les secrets | Variables protégées, masquage, rotation | Secrets |
| 21 | Scanner le code (SAST) | SAST + Secret Detection, rapports JSON | Scanners sécurité |
| 22 | Scanner les images | Container Scanning, Trivy, .trivyignore | Supply chain |
| 23 | Scanner les dépendances | Dependency Scanning + SBOM CycloneDX | Supply chain |
| 24 | Branches protégées | Approval rules, push rules, pipeline vert obligatoire | Branches protégées |
| 25 | Durcir un pipeline | Épinglage images, least privilege, timeouts, audit | Durcissement, Audit |
| 26 | Examen final | Audit + remédiation d’un pipeline vulnérable | Tous les volets |
Correspondance labs ↔ guides
Section intitulée « Correspondance labs ↔ guides »Chaque lab est rattaché à un guide théorique de la formation. L’idée : lire le guide, puis pratiquer dans le lab.
| Lab | Guide |
|---|---|
| 20 | Secrets |
| 21 | Scanners sécurité |
| 22–23 | Supply chain |
| 24 | Branches protégées |
| 25 | Durcissement + Audit |
| 26 | Tous les volets + Attaques pipelines |
Variante homelab
Section intitulée « Variante homelab »Les labs fonctionnent sur gitlab.com avec les runners SaaS partagés. Si vous préférez un GitLab self-managed avec vos propres runners, consultez :
Les fichiers .gitlab-ci.yml restent identiques — seule l’infrastructure d’exécution change.
À retenir
Section intitulée « À retenir »- 26 labs progressifs sur un vrai projet Python, du premier pipeline à la sécurité complète
- Chaque lab cible une compétence précise, validable par un pipeline vert
- Le modèle fork + branch permet de travailler à son rythme avec la solution disponible
- Les labs complètent les guides théoriques — lisez le guide d’abord, pratiquez ensuite