Parent-child pipelines
Les parent-child pipelines permettent de decouper un pipeline complexe en sous-pipelines independants. Le pipeline parent declenche des pipelines enfants definis dans d'autres fichiers YAML.
Declenchement d'un child pipeline
# .gitlab-ci.yml (parent)
stages:
- triggers
trigger-frontend:
stage: triggers
trigger:
include: frontend/.gitlab-ci.yml
strategy: depend # Le parent attend la fin du child
trigger-backend:
stage: triggers
trigger:
include: backend/.gitlab-ci.yml
strategy: depend
Pipeline enfant dynamique
generate-config:
stage: build
script:
- python generate_pipeline.py > generated-ci.yml
artifacts:
paths:
- generated-ci.yml
trigger-dynamic:
stage: deploy
trigger:
include:
- artifact: generated-ci.yml
job: generate-config
strategy: depend
Multi-project pipelines
Declencher un pipeline dans un autre projet GitLab :
deploy-infra:
stage: deploy
trigger:
project: devops/infrastructure
branch: main
strategy: depend
# Avec passage de variables
deploy-with-vars:
stage: deploy
variables:
APP_VERSION: $CI_COMMIT_TAG
ENVIRONMENT: production
trigger:
project: devops/deploy-scripts
branch: main
DAG (Directed Acyclic Graph)
Le mot-cle needs permet de creer un graphe de dependances sans respecter l'ordre des stages :
stages:
- build
- test
- deploy
build-frontend:
stage: build
script: npm run build
build-backend:
stage: build
script: mvn package
test-frontend:
stage: test
needs: ["build-frontend"] # Demarre des que build-frontend finit
script: npm test
test-backend:
stage: test
needs: ["build-backend"] # Pas besoin d'attendre build-frontend
script: mvn test
deploy:
stage: deploy
needs: ["test-frontend", "test-backend"]
script: ./deploy.sh
Astuce : Le DAG reduit considerablement le temps total du pipeline car les jobs n'attendent plus la fin de tout le stage precedent.