
Un pipeline lent finit par coûter cher : attente développeur, review ralentie, files runners saturées. Dans ce lab, vous optimisez les points qui apportent le plus de gains sans complexifier inutilement le YAML : cache bien clés, images allégées et parallélisme contrôlé.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Choisir une clé de cache stable et pertinente
- Éviter les caches inutilisables (
$CI_COMMIT_SHA) - Utiliser
needspour lancer des jobs en parallèle - Mesurer l’impact réel des optimisations
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »Les pipelines lents sont un problème de productivité avant d’être un problème technique. Si chaque push met 8 minutes, les développeurs poussent moins souvent et accumulent des changements plus gros, ce qui augmente le risque de conflit et d’erreur.
Ce lab répond à des cas fréquents :
- cache jamais réutilisé à cause d’une clé trop spécifique
- jobs indépendants bloqués par la logique de stage séquentielle
- images trop lourdes téléchargées à chaque run
Prérequis
Section intitulée « Prérequis »- Lab 11 — Débugger un job bloqué terminé
- Avoir lu DAG et parallélisme et Artifacts et cache
Point de départ
Section intitulée « Point de départ »-
Basculez sur la branche du lab
Fenêtre de terminal cd pipeline-craftgit checkout starter/lab-12 -
Lancez un run de référence
Fenêtre de terminal git push origin starter/lab-12 -
Notez la durée du pipeline
Cette valeur sert de baseline avant optimisation.
Le problème
Section intitulée « Le problème »La lenteur vient souvent de trois causes combinées :
- cache inexploitable
- exécution trop séquentielle
- images ou builds non optimisés
Vous allez corriger ces trois zones sans rendre le pipeline illisible.
L’exercice
Section intitulée « L’exercice »Étape 1 — Corriger la stratégie de cache
Section intitulée « Étape 1 — Corriger la stratégie de cache »-
Remplacez une clé instable par
key.filesMauvais exemple :
cache:key: $CI_COMMIT_SHABon exemple :
cache:key:files:- requirements-dev.txtpaths:- .pip-cache/ -
Vérifiez sur deux runs successifs
Le second run doit restaurer le cache.
Étape 2 — Paralléliser avec needs
Section intitulée « Étape 2 — Paralléliser avec needs »-
Identifiez les jobs indépendants
ruff-lintetpytestpeuvent démarrer sans dépendance forte l’un envers l’autre. -
Ajoutez des
needsexplicites si nécessairepytest:stage: testneeds: []Cette approche active un comportement DAG et réduit l’attente artificielle liée aux stages.
Étape 3 — Vérifier les images utilisées
Section intitulée « Étape 3 — Vérifier les images utilisées »-
Confirmez l’usage de variantes allégées (
python:3.12-slim) -
Gardez
docker:27uniquement pour les jobs qui en ont besoinChaque job doit utiliser l’image minimale adaptée à son besoin.
Étape 4 — Mesurer le gain
Section intitulée « Étape 4 — Mesurer le gain »-
Poussez votre optimisation
Fenêtre de terminal git add .gitlab-ci.ymlgit commit -m "ci: speed up pipeline with cache and dag"git push origin starter/lab-12 -
Comparez la durée avec la baseline
Vous devez observer une réduction tangible dès le second run optimisé.
Vérification
Section intitulée « Vérification »- Le cache est restauré sur un run suivant
- Les jobs indépendants ne s’attendent plus inutilement
- Le pipeline total est sensiblement plus court
- Le YAML reste lisible et maintenable
Pièges fréquents
Section intitulée « Pièges fréquents »Un pipeline très optimisé mais illisible devient vite un problème de maintenance. Cherchez un équilibre entre performance et clarté.
Autre piège : annoncer un gain après un seul run. Le premier run sert souvent à alimenter le cache. Mesurez au minimum sur deux à trois exécutions comparables.
À retenir
Section intitulée « À retenir »- Une bonne clé de cache change quand les dépendances changent, pas à chaque commit
- Le DAG (
needs) réduit l’attente artificielle des stages - Les images allégées accélèrent le pull et donc le pipeline
- Mesurer avant/après est indispensable pour valider une optimisation