
Vos pipelines attendent la fin d’un stage complet alors qu’un seul job est nécessaire ? Avec needs: (DAG), un job démarre dès que ses vraies dépendances sont terminées, sans attendre tout le stage. Résultat : des pipelines souvent sensiblement plus rapides (et surtout plus parallèles).
Ce guide est fait pour vous si…
Section intitulée « Ce guide est fait pour vous si… »Prérequis
Section intitulée « Prérequis »Avant de continuer, assurez-vous de maîtriser :
Le problème sans DAG
Section intitulée « Le problème sans DAG »Par défaut, GitLab exécute les pipelines stage par stage :
stages: - build - test - deploy
build: stage: build script: npm run build
lint: stage: test script: npm run lint
unit_tests: stage: test script: npm test
integration_tests: stage: test script: npm run test:integration
deploy: stage: deploy script: ./deploy.shProblème : deploy attend que lint, unit_tests ET integration_tests soient tous terminés, même si deploy n’a besoin que de build.
Configuration avec needs
Section intitulée « Configuration avec needs »needs: définit les vraies dépendances d’un job :
stages: - build - test - deploy
build: stage: build script: npm run build artifacts: paths: - dist/
lint: stage: test script: npm run lint needs: [] # Pas de dépendance, démarre immédiatement
unit_tests: stage: test script: npm test needs: ["build"] # Attend seulement build
integration_tests: stage: test script: npm run test:integration needs: ["build"]
deploy: stage: deploy script: ./deploy.sh needs: ["unit_tests"] # N'attend pas lint ni integration_testsRésultat :
Le pipeline est plus rapide car deploy n’attend pas lint ni integration_tests.
Options de needs
Section intitulée « Options de needs »Liste simple
Section intitulée « Liste simple »deploy: needs: ["build", "test"]Avec artefacts
Section intitulée « Avec artefacts »Par défaut, needs télécharge les artefacts des jobs référencés. Pour désactiver :
deploy: needs: - job: build artifacts: true # Télécharge les artefacts (défaut) - job: lint artifacts: false # N'a pas besoin des artefacts de lintneeds: [] — aucune dépendance
Section intitulée « needs: [] — aucune dépendance »Un job avec needs: [] démarre immédiatement, sans attendre la fin du stage précédent :
lint: stage: test needs: [] # Démarre en même temps que build ! script: npm run lintneeds avec optional
Section intitulée « needs avec optional »Si un job peut ne pas exister (conditionné par rules), optional: true évite que le pipeline échoue à la création :
deploy: needs: - job: build - job: security_scan optional: true # Le job peut ne pas exister (rules non matchées)Limites et cas particuliers
Section intitulée « Limites et cas particuliers »| Limite / Cas | Détail |
|---|---|
| Max 50 jobs | Par défaut, needs accepte max 50 jobs (ajustable en self-managed) |
| Parallel | Si needs référence un job avec parallel:, il dépend de tous les jobs parallélisés |
| Même stage | needs peut référencer des jobs du même stage |
| Ne pas mélanger | Évitez de combiner needs et dependencies dans un même job |
Visualiser le DAG
Section intitulée « Visualiser le DAG »GitLab affiche le graphe de dépendances dans l’interface :
-
Allez dans Build > Pipelines
-
Cliquez sur un pipeline
-
Sélectionnez l’onglet Needs (ou regardez le graphe qui montre les flèches)

Le graphe montre les vraies dépendances entre jobs, pas l’organisation par stages.
Exemples pratiques
Section intitulée « Exemples pratiques »Pipeline Node.js optimisé
Section intitulée « Pipeline Node.js optimisé »stages: - prepare - quality - build - test - deploy
install: stage: prepare script: npm ci cache: key: files: - package-lock.json paths: - node_modules/ artifacts: paths: - node_modules/ expire_in: 1 hour
# Jobs de qualité : pas de dépendance, démarrent immédiatementlint: stage: quality needs: [] script: npm run lint
format_check: stage: quality needs: [] script: npm run format:check
# Build : attend seulement installbuild: stage: build needs: ["install"] script: npm run build artifacts: paths: - dist/
# Tests : en parallèle, chacun attend seulement ce dont il a besoinunit_tests: stage: test needs: ["install"] script: npm test
e2e_tests: stage: test needs: ["build"] # A besoin du build script: npm run test:e2e
# Deploy : attend les tests critiques, pas le lintdeploy_staging: stage: deploy needs: ["unit_tests", "build"] script: ./deploy.sh stagingMonorepo avec services indépendants
Section intitulée « Monorepo avec services indépendants »stages: - build - test - deploy
# Frontend et Backend buildent en parallèlebuild_frontend: stage: build script: npm run build:frontend artifacts: paths: - frontend/dist/
build_backend: stage: build script: npm run build:backend artifacts: paths: - backend/target/
# Tests indépendantstest_frontend: stage: test needs: ["build_frontend"] script: npm run test:frontend
test_backend: stage: test needs: ["build_backend"] script: npm run test:backend
# Déploiements indépendantsdeploy_frontend: stage: deploy needs: ["test_frontend"] script: ./deploy-frontend.sh
deploy_backend: stage: deploy needs: ["test_backend"] script: ./deploy-backend.shLe frontend et le backend sont complètement indépendants. Si le backend est lent, le frontend se déploie quand même.
Bonnes pratiques
Section intitulée « Bonnes pratiques »-
Minimisez les dépendances : un job ne doit dépendre que de ce qui est strictement nécessaire.
-
Utilisez
needs: []pour les jobs sans dépendances réelles (lint, format, analyse statique). -
Séparez les artefacts : ne passez que ce qui est nécessaire avec
artifacts: false. -
Visualisez le graphe : utilisez l’interface GitLab pour valider vos dépendances.
-
Gardez les stages : les stages restent utiles pour l’organisation visuelle, même avec DAG.
Erreurs fréquentes
Section intitulée « Erreurs fréquentes »| Erreur | Cause | Solution |
|---|---|---|
circular dependency | Job A needs B, Job B needs A | Revoir l’architecture |
too many dependencies | Plus de 50 jobs dans needs | Réduire ou ajuster la limite (self-managed) |
| Job attend trop longtemps | Dépendance inutile dans needs | Supprimer les dépendances non nécessaires |
| Artefacts non trouvés | Job dans needs n’a pas d’artefacts | Vérifier artifacts: dans le job source |
| Artefacts manquants (stage précédent) | needs désactive le téléchargement auto | Ajouter explicitement le job dans needs |
needs: [] mais job échoue | Le job a besoin d’artefacts | Ajouter la vraie dépendance |
À retenir
Section intitulée « À retenir »needsdéfinit les vraies dépendances, pas les stagesneeds: []= aucune dépendance, démarre immédiatement- Artefacts : avec
needs, seuls ceux des jobs listés sont téléchargés - Limite : max 50 jobs dans
needspar défaut - Pas de boucles — les dépendances doivent être acycliques
- Ne pas mélanger
needsetdependenciesdans un même job - Visualisez le graphe dans GitLab pour valider