doc-locale/fr-fr/ci/yaml/matrix_expressions.md
{{< details >}}
{{< /details >}}
{{< history >}}
{{< /history >}}
Les expressions de matrice permettent des dépendances de job dynamiques basées sur les identifiants parallel:matrix, afin de créer des mappages 1:1 entre les jobs parallel:matrix.
Les expressions de matrice présentent certaines limitations par rapport aux expressions d'entrées :
Les expressions de matrice utilisent la syntaxe $[[ matrix.IDENTIFIER ]] pour référencer un identifiant parallel:matrix dans les dépendances de job. Par exemple :
needs:
- job: build
parallel:
matrix:
- OS: ['$[[ matrix.OS ]]']
ARCH: ['$[[ matrix.ARCH ]]']
needs:parallel:matrix {#matrix-expressions-in-needsparallelmatrix}Vous pouvez utiliser des expressions de matrice pour référencer dynamiquement des identifiants de matrice dans les dépendances de job, ce qui permet des mappages 1:1 entre les jobs de matrice sans spécifier manuellement toutes les combinaisons.
Par exemple :
linux:build:
stage: build
script: echo "Building linux..."
parallel:
matrix:
- PROVIDER: [aws, gcp]
STACK: [monitoring, app1, app2]
linux:test:
stage: test
script: echo "Testing linux..."
parallel:
matrix:
- PROVIDER: [aws, gcp]
STACK: [monitoring, app1, app2]
needs:
- job: linux:build
parallel:
matrix:
- PROVIDER: ['$[[ matrix.PROVIDER ]]']
STACK: ['$[[ matrix.STACK ]]']
Cet exemple crée un mappage de dépendances 1:1 entre tous les jobs linux:build et linux:test :
linux:test: [aws, monitoring] dépend de linux:build: [aws, monitoring]linux:test: [aws, app1] dépend de linux:build: [aws, app1]parallel:matrix.Avec les expressions matrix., vous n'avez pas besoin de spécifier manuellement chaque combinaison de matrice.
Les expressions de matrice référencent uniquement les identifiants de la configuration de matrice du job actuel.
parallel:matrix {#use-yaml-anchors-to-reuse-parallelmatrix-configuration}Vous pouvez utiliser des ancres YAML pour réutiliser la configuration parallel:matrix sur plusieurs jobs avec des configurations parallel:matrix et des dépendances complexes.
Par exemple :
stages:
- compile
- test
- deploy
.build_matrix: &build_matrix
parallel:
matrix:
- OS: ["ubuntu", "alpine"]
ARCH: ["amd64", "arm64"]
VARIANT: ["slim", "full"]
compile_binary:
stage: compile
script:
- echo "Compiling for $OS-$ARCH-$VARIANT"
<<: *build_matrix
integration_test:
stage: test
script:
- echo "Testing $OS-$ARCH-$VARIANT"
<<: *build_matrix
needs:
- job: compile_binary
parallel:
matrix:
- OS: ['$[[ matrix.OS ]]']
ARCH: ['$[[ matrix.ARCH ]]']
VARIANT: ['$[[ matrix.VARIANT ]]']
deploy_artifact:
stage: deploy
script:
- echo "Deploying $OS-$ARCH-$VARIANT"
<<: *build_matrix
needs:
- job: integration_test
parallel:
matrix:
- OS: ['$[[ matrix.OS ]]']
ARCH: ['$[[ matrix.ARCH ]]']
VARIANT: ['$[[ matrix.VARIANT ]]']
Cette configuration crée 24 jobs : 8 jobs par étape (2 OS × 2 ARCH × 2 VARIANT combinaisons), avec des dépendances 1:1 entre les étapes.
Vous pouvez combiner des expressions de matrice avec des valeurs spécifiques pour créer un sous-ensemble sélectif de dépendances :
stages:
- prepare
- build
- test
.full_matrix: &full_matrix
parallel:
matrix:
- PLATFORM: ["linux", "windows", "macos"]
VERSION: ["16", "18", "20"]
.platform_only: &platform_only
parallel:
matrix:
- PLATFORM: ["linux", "windows", "macos"]
prepare_env:
stage: prepare
script:
- echo "Preparing $PLATFORM with Node.js $VERSION"
<<: *full_matrix
build_project:
stage: build
script:
- echo "Building on $PLATFORM"
needs:
- job: prepare_env
parallel:
matrix:
- PLATFORM: ['$[[ matrix.PLATFORM ]]']
VERSION: ["18"] # Only depend on Node.js 18 preparations
<<: *platform_only
Dans cet exemple :
prepare_env utilise parallel:matrix pour créer 9 jobs : 3 PLATFORM × 3 VERSIONS.build_project utilise parallel:matrix pour créer 3 jobs : 3 valeurs PLATFORM uniquement.build_project dépend uniquement de Node.js 18 (VERSION) pour toutes les plateformes (PLATFORM).Vous pouvez également configurer toutes les dépendances manuellement.