DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesGitHub Actions avancé : secrets, matrices et déploiement02 - Tester sur plusieurs versions avec la stratégie matrix

Détails

  • 20 minutes
  • Avancé

Objectifs

  • Définir une stratégie matrix avec plusieurs versions Node.js
  • Comprendre l'option fail-fast et ses implications
  • Utiliser include et exclude pour affiner la matrice
  • Créer une matrix à deux dimensions
Module GitHub Actions avancé : secrets, matrices et déploiement

Exercice 02 : Tester sur plusieurs versions avec la stratégie matrix

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Définir strategy.matrix pour lancer des jobs en parallèle sur plusieurs versions
  • ✅ Référencer une valeur de la matrice avec ${{ matrix.node-version }}
  • ✅ Configurer fail-fast: false pour ne pas annuler toutes les combinaisons si une échoue
  • ✅ Utiliser include et exclude pour personnaliser les combinaisons de la matrice

Durée estimée : 20 min | Difficulté : ⭐⭐⭐☆☆


📖 Contexte

Quand une bibliothèque ou une application doit fonctionner sur plusieurs versions de Node.js (ou plusieurs OS, ou plusieurs versions d'une dépendance), tester chaque combinaison manuellement est fastidieux. La stratégie matrix de GitHub Actions génère automatiquement un job pour chaque combinaison et les exécute en parallèle.

Avec 3 versions de Node.js et 2 OS, GitHub génère 6 jobs automatiquement - sans dupliquer le YAML.


📋 Énoncé

Vous allez créer un workflow qui teste votre application sur Node.js 18, 20 et 22 en parallèle, puis étendre la matrice pour tester sur Linux et Windows simultanément.

Résultat attendu :

  • 3 jobs parallèles nommés Tests (18), Tests (20), Tests (22)
  • Si la version 18 échoue, les versions 20 et 22 continuent
  • La matrice étendue génère 6 jobs (3 versions × 2 OS)

🧭 Déroulement

Tâche 1 : Créer une matrix sur les versions Node.js

Créez .github/workflows/matrix.yml avec un job test qui utilise strategy.matrix pour définir trois versions de Node.js : 18, 20, et 22.

Indice :

`yaml

test:

name: Tests (Node ${{ matrix.node-version }})

runs-on: ubuntu-latest

strategy:

matrix:

node-version: [18, 20, 22]

steps:

- uses: actions/setup-node@v4

with:

node-version: ${{ matrix.node-version }}

`

Vérification : L'interface Actions affiche 3 jobs parallèles avec des noms distincts.


Tâche 2 : Configurer fail-fast: false

Ajoutez fail-fast: false dans la stratégie. Forcez un échec sur la version 18 (via if: matrix.node-version == 18) et observez que les versions 20 et 22 continuent quand même.

Indice :

`yaml

strategy:

fail-fast: false

matrix:

node-version: [18, 20, 22]

`

Par défaut (fail-fast: true), si un job de la matrice échoue, GitHub annule immédiatement tous les autres. Avec false, ils continuent jusqu'à leur terme.

Vérification : Avec fail-fast: false et un job volontairement en échec, les autres jobs continuent et affichent leur résultat.


Tâche 3 : Étendre la matrix avec les OS

Ajoutez os: [ubuntu-latest, windows-latest] dans la matrice et remplacez runs-on: ubuntu-latest par runs-on: ${{ matrix.os }}. Cela génère 6 combinaisons.

Indice :

`yaml

strategy:

matrix:

node-version: [18, 20, 22]

os: [ubuntu-latest, windows-latest]

runs-on: ${{ matrix.os }}

`

Une matrix à 2 dimensions génère N×M jobs. Ici : 3 × 2 = 6 jobs en parallèle.

Vérification : L'interface affiche 6 jobs avec des noms comme Tests (18, ubuntu-latest) et Tests (18, windows-latest).


Tâche 4 : Exclure une combinaison avec exclude

Excluez la combinaison Node 18 + Windows (trop ancienne pour être supportée sur ce OS) avec exclude:.

Indice :

`yaml

matrix:

node-version: [18, 20, 22]

os: [ubuntu-latest, windows-latest]

exclude:

- node-version: 18

os: windows-latest

`

La matrice passe de 6 à 5 combinaisons.

Vérification : L'interface affiche 5 jobs - la combinaison 18 + windows est absente.


Tâche 5 : Ajouter une combinaison avec include

Ajoutez une combinaison spéciale Node 20 + macOS (non présente dans la matrice de base) avec include:.

Indice :

`yaml

include:

- node-version: 20

os: macos-latest

experimental: true

`

include peut ajouter des combinaisons entièrement nouvelles ou enrichir des combinaisons existantes avec des propriétés supplémentaires.

Vérification : L'interface affiche un job supplémentaire pour Node 20 + macOS.


🗂️ Mini-Projet : Matrix complète avec include/exclude

yaml
# Checkpoints à valider :
# [ ] strategy.matrix définit node-version: [18, 20, 22]
# [ ] ${{ matrix.node-version }} est utilisé dans actions/setup-node
# [ ] fail-fast: false est configuré
# [ ] La matrix à 2D (versions × OS) génère les bons jobs
# [ ] exclude retire la combinaison 18 + windows-latest
# [ ] include ajoute la combinaison 20 + macos-latest
# [ ] Bonus : ajoutez une propriété expérimental via include

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement
  • Tâche 1 : Créer une matrix sur les versions Node.js
  • Tâche 2 : Configurer fail-fast: false
  • Tâche 3 : Étendre la matrix avec les OS
  • Tâche 4 : Exclure une combinaison avec exclude
  • Tâche 5 : Ajouter une combinaison avec include
  • 🗂️ Mini-Projet : Matrix complète avec include/exclude