Avant, parallel:matrix permettait de lancer la même tâche sur
plusieurs versions. Mais impossible de référencer UN job spécifique
de la matrice dans un needs. Toute la matrice formait un bloc
indivisible.
GitLab 16.7 a changé ça. Maintenant, tu peux needs un job précis
de la matrice. Et ça débloque des pipelines plus propres.
Avant : le workaround
# ❌ Avant GitLab 16.7 : impossible de référencer un job de la matrice
test:
parallel:
matrix:
- PYTHON: ["3.9", "3.10", "3.11"]
script: pytest
deploy:
needs: ["test"] # Attend TOUS les jobs de la matrice
script: ./deploy.sh
Après : des needs chirurgicaux
# ✅ GitLab 16.7+ : on cible un job précis
test:
parallel:
matrix:
- PYTHON: ["3.9", "3.10", "3.11"]
script: pytest
deploy_39:
needs: ["test: [3.9]"]
script: ./deploy-py39.sh
deploy_latest:
needs: ["test: [3.11]"]
script: ./deploy-pylatest.sh
Le job deploy_39 attend UNIQUEMENT test: [3.9]. Il n’attend pas
les tests Python 3.10 et 3.11. Résultat : le déploiement peut partir
dès que sa version est validée, sans attendre les autres.
Format des noms de jobs matrix
nom_du_job: [valeur1, valeur2]
test: [3.9]→ le job test avec PYTHON=3.9build: [linux, amd64]→ le job build avec OS=linux, ARCH=amd64test: [3.11]→ si une seule variable dans la matrice
Le piège
Si ta matrice a PLUSIEURS variables, tu dois toutes les spécifier :
test:
parallel:
matrix:
- PYTHON: ["3.10", "3.11"]
DJANGO: ["4.2", "5.0"]
# ✅ Cibler le job Python 3.11 + Django 5.0
needs: ["test: [3.11, 5.0]"]
# ❌ Ne matche rien (il manque DJANGO)
needs: ["test: [3.11]"]
L’ordre des valeurs dans [val1, val2] suit l’ordre de déclaration
dans la matrice : PYTHON puis DJANGO.
Deux jobs matrixés qui se couplent
Le vrai cas d’usage de cette feature : deux jobs qui sont TOUS LES
DEUX en parallel:matrix, et le deuxième attend un job précis du premier.
build:
parallel:
matrix:
- ARCH: [amd64, arm64]
script: ./build.sh --arch $ARCH
test:
parallel:
matrix:
- ARCH: [amd64, arm64]
needs: ["build: [$ARCH]"]
script: ./test.sh --arch $ARCH
test: [amd64] attend uniquement build: [amd64]. test: [arm64]
attend build: [arm64]. Chaque job de la deuxième matrice avance
indépendamment, sans attendre les autres combinaisons.