L’issue s’ouvre déjà remplie avec le titre et l’adresse de cette page.
Imaginez que vous devez tester votre application sur 3 systèmes d'exploitation
et 3 versions de Node.js. Cela fait 9 combinaisons à tester. Sans outil adapté,
vous devriez copier-coller le même code 9 fois. La matrix strategy résout
ce problème élégamment.
Une matrix décrit des axes de variation, et GitHub génère un job par
combinaison. Vous écrivez la définition du job une seule fois, la duplication
est prise en charge par la plateforme. La
documentation officielle
détaille chaque clé de strategy.matrix.
Le nombre de jobs générés se calcule, il ne se devine pas. Savoir le prévoir
évite la mauvaise surprise du workflow qui lance soudain quarante exécutions.
GitHub calcule le produit cartésien de tous les axes. Ne vous laissez pas
intimider par ce terme mathématique : c'est simplement toutes les
combinaisons possibles entre vos listes de valeurs.
Imaginez un menu de restaurant : si vous avez 2 entrées et 3 plats, vous
pouvez composer 2 × 3 = 6 menus différents. Le produit cartésien, c'est
exactement ça !
Avec une matrix à deux axes :
Axe 1: [A, B] ┐
├──→ Combinaisons: [A,X], [A,Y], [B,X], [B,Y]
Axe 2: [X, Y] ┘
2 × 2 = 4 jobs
Comment lire ce schéma ? GitHub prend chaque valeur du premier axe (A,
puis B) et l'associe à chaque valeur du second axe (X, puis Y). Résultat : 4
combinaisons, donc 4 jobs parallèles.
Avec trois axes, le principe reste le même, on multiplie simplement les
possibilités :
os: [ubuntu, windows] 2 valeurs
node: [18, 20, 22] 3 valeurs
database: [postgres, mysql] 2 valeurs
─────────
2 × 3 × 2 = 12 jobs
Traduction concrète : chaque combinaison OS + version Node + base de
données sera testée. Ubuntu avec Node 18 et Postgres, Ubuntu avec Node 18 et
MySQL, Ubuntu avec Node 20 et Postgres... et ainsi de suite jusqu'aux 12
combinaisons.
Imaginons que vous voulez tester Node 22, mais uniquement sur Ubuntu
(car c'est expérimental sur les autres OS) :
strategy:
matrix:
os: [ubuntu-24.04, windows-2022]
node: [18, 20]
include:
# Cette combinaison N'EXISTE PAS dans le produit cartésien
# (node 22 n'est pas dans la liste originale)
- os: ubuntu-24.04
node: 22
experimental: true# Variable bonus pour cette combinaison
Sans include : 2 × 2 = 4 combinaisons
Avec include : 4 + 1 = 5 combinaisons
Les quatre combinaisons automatiques (ubuntu-24.04 et windows-latest croisés avec Node 18 et 20) reçoivent une cinquième combinaison ajoutée par include, ubuntu-24.04 avec Node 22 et la variable experimental: true, soit cinq jobs.Combinaisons automatiques (produit cartésien)Combinaison ajoutée par includeTotal : 4 combinaisons automatiques + 1 ajoutée = 5 jobsOSNodeVariables extraubuntu-24.0418-ubuntu-24.0420-windows-latest18-windows-latest20-ubuntu-24.0422experimental: true+ include
Par défaut, une matrix lance tout en parallèle et s'arrête au premier échec. Ces
deux réglages permettent d'arbitrer entre la vitesse de retour et la quantité
d'informations obtenue en une exécution.
Par défaut, fail-fast est à true. Cela signifie que si un seul job
de la matrix échoue, GitHub annule tous les autres immédiatement.
Avec fail-fast: true, l'échec du job 2 annule les jobs 3, 4 et 5 ; avec fail-fast: false, tous les jobs vont au bout et l'on voit les deux échecs sur cinq, jobs 2 et 5.fail-fast: true (défaut)fail-fast: falseJob 1 (ubuntu/Node 18) : réussiJob 2 (ubuntu/Node 20) : échouéJob 3 (ubuntu/Node 22) : annuléJob 4 (windows/Node 18) : annuléJob 5 (windows/Node 20) : annulé3 jobs annulés à l'échecJob 1 (ubuntu/Node 18) : réussiJob 2 (ubuntu/Node 20) : échouéJob 3 (ubuntu/Node 22) : réussiJob 4 (windows/Node 18) : réussiJob 5 (windows/Node 20) : échoué2 échecs sur 5 (tous vus)
Par défaut, GitHub lance tous les jobs en parallèle. Avec max-parallel,
vous pouvez limiter ce nombre :
strategy:
max-parallel: 2# Maximum 2 jobs en même temps
matrix:
node: [18, 20, 22] # 3 jobs au total
Pourquoi limiter le parallélisme ?
Situation
Raison
Tests avec base de données partagée
Éviter les conflits de données
API externe avec rate limiting
Ne pas dépasser les quotas
Runners self-hosted limités
Éviter la saturation
Économiser les minutes
Réduire les coûts (repos privés)
Glissez pour voir
Avec max-parallel: 2, cinq jobs s'exécutent en trois lots successifs : jobs 1 et 2, puis 3 et 4, puis 5.Lot 1 (2 jobs)Lot 2 (2 jobs)Lot 3 (1 job)Job 1Job 2Job 3Job 4Job 5tempstemps
Ces constructions servent quand les valeurs de la matrix ne sont pas connues à
l'écriture du workflow, ou quand elles dépendent du contexte d'exécution.
Parfois, vous ne connaissez pas les valeurs de la matrix à l'avance. Par
exemple, vous voulez tester uniquement les modules modifiés. La solution :
générer la matrix dynamiquement dans un premier job.
Vérifiez que l'essentiel de ce guide est acquis. Les questions portent
uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
6 questions
6 min.
70% requis
Informations
Le chronomètre démarre au clic sur Démarrer
Questions à choix multiples, vrai/faux et réponses courtes
Vous pouvez naviguer entre les questions
Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
⏱️--:--
0 / 6
Vérification
(0/0)
--:--
0%
0Correctes
0À revoir
0:00Temps
-Niveau
Score par domaine
Un domaine regroupe plusieurs guides et reçoit plusieurs questions : son score est plus fiable qu'un score par thème, qui porte souvent sur une seule question.
Bilan
Points forts
Aucun sujet réussi à 80 % sur au moins deux questions pour l’instant.