{"meta":{"title":"Exécution de variantes de tâches dans un workflow","intro":"Créez une matrice pour définir les variantes de chaque travail.","product":"GitHub Actions","breadcrumbs":[{"href":"/fr/actions","title":"GitHub Actions"},{"href":"/fr/actions/how-tos","title":"Guides pratiques"},{"href":"/fr/actions/how-tos/write-workflows","title":"Écrire des workflows"},{"href":"/fr/actions/how-tos/write-workflows/choose-what-workflows-do","title":"Choisir ce que font les workflows"},{"href":"/fr/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations","title":"Exécuter des variantes de tâches"}],"documentType":"article"},"body":"# Exécution de variantes de tâches dans un workflow\n\nCréez une matrice pour définir les variantes de chaque travail.\n\n## À propos des stratégies de matrice\n\nUne stratégie de matrice vous permet d’utiliser des variables dans une définition de travail unique pour créer automatiquement plusieurs exécutions de travaux basées sur les combinaisons des variables. Par exemple, vous pouvez utiliser une stratégie de matrice pour tester votre code dans plusieurs versions d’un langage ou sur plusieurs systèmes d’exploitation.\n\n## Ajout d’une stratégie de matrice à votre travail de workflow\n\nUtilisez `jobs.<job_id>.strategy.matrix` pour définir une matrice de différentes configurations de travail. Dans votre matrice, définissez une ou plusieurs variables suivies d’un tableau de valeurs. Par exemple, la matrice suivante a une variable appelée `version` avec la valeur `[10, 12, 14]`, et une variable appelée `os` avec la valeur `[ubuntu-latest, windows-latest]` :\n\n```yaml\njobs:\n  example_matrix:\n    strategy:\n      matrix:\n        version: [10, 12, 14]\n        os: [ubuntu-latest, windows-latest]\n```\n\nUne tâche s'exécutera pour chaque combinaison possible des variables. Dans cet exemple, le workflow exécute six travaux, un pour chaque combinaison des variables `os` et `version`.\n\nLa matrice ci-dessus crée les travaux dans l’ordre suivant.\n\n* `{version: 10, os: ubuntu-latest}`\n* `{version: 10, os: windows-latest}`\n* `{version: 12, os: ubuntu-latest}`\n* `{version: 12, os: windows-latest}`\n* `{version: 14, os: ubuntu-latest}`\n* `{version: 14, os: windows-latest}`\n\nPour obtenir des informations de référence et exemples, consultez [Syntaxe de flux de travail pour GitHub Actions](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrix).\n\n## Utilisation de contextes pour créer des matrices\n\nPour créer des matrices avec des informations sur les exécutions de flux de travail, les variables, les environnements d’exécuteur, les travaux et les étapes, accédez aux contextes à l’aide de la `${{ <context> }}` syntaxe d’expression. Pour plus d’informations sur les contextes, consultez « [Référence des contextes](/fr/actions/reference/workflows-and-actions/contexts) ».\n\nPar exemple, le workflow suivant se déclenche sur l’événement `repository_dispatch` et utilise les informations de la charge utile de l’événement pour générer la matrice. Lorsqu'un événement d'envoi de référentiel est créé avec des données comme celles ci-dessous, la variable de matrice `version` aura la valeur `[12, 14, 16]`. Pour plus d’informations sur le déclencheur `repository_dispatch`, consultez [Événements qui déclenchent des flux de travail](/fr/actions/reference/workflows-and-actions/events-that-trigger-workflows#repository_dispatch).\n\n```json\n{\n  \"event_type\": \"test\",\n  \"client_payload\": {\n    \"versions\": [12, 14, 16]\n  }\n}\n```\n\n```yaml\non:\n  repository_dispatch:\n    types:\n      - test\n\njobs:\n  example_matrix:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        version: ${{ github.event.client_payload.versions }}\n    steps:\n      - uses: actions/setup-node@v7\n        with:\n          node-version: ${{ matrix.version }}\n```\n\n## Développement ou ajout de configurations de matrice\n\nPour développer des configurations de matrice existantes ou ajouter de nouvelles configurations, utilisez `jobs.<job_id>.strategy.matrix.include`. La valeur de `include` est une liste d’objets.\n\nPar exemple, prenez en compte la matrice suivante.\n\n```yaml\nstrategy:\n  matrix:\n    fruit: [apple, pear]\n    animal: [cat, dog]\n    include:\n      - color: green\n      - color: pink\n        animal: cat\n      - fruit: apple\n        shape: circle\n      - fruit: banana\n      - fruit: banana\n        animal: cat\n```\n\nCeci entraînera six travaux avec les combinaisons de matrices suivantes.\n\n* `{fruit: apple, animal: cat, color: pink, shape: circle}`\n* `{fruit: apple, animal: dog, color: green, shape: circle}`\n* `{fruit: pear, animal: cat, color: pink}`\n* `{fruit: pear, animal: dog, color: green}`\n* `{fruit: banana}`\n* `{fruit: banana, animal: cat}`\n\nCette entrée `include` a été appliquée de la manière suivante.\n\n* `{color: green}` est ajouté à toutes les combinaisons de matrices d’origine, car il peut être ajouté sans remplacer aucune partie des combinaisons d’origine.\n* `{color: pink, animal: cat}` ajoute `color:pink` uniquement aux combinaisons de matrices d’origine qui incluent `animal: cat`. Cela remplace le `color: green` qui a été ajouté par l’entrée `include` précédente.\n* `{fruit: apple, shape: circle}` ajoute `shape: circle` uniquement aux combinaisons de matrices d’origine qui incluent `fruit: apple`.\n* `{fruit: banana}` ne peut pas être ajouté à une combinaison de matrices d’origine sans remplacer une valeur. Il est donc ajouté en tant que combinaison de matrices supplémentaire.\n* `{fruit: banana, animal: cat}` ne peut pas être ajouté à une combinaison de matrices d’origine sans remplacer une valeur. Il est donc ajouté en tant que combinaison de matrices supplémentaire. Cela ne l’ajoute pas à la combinaison de matrices `{fruit: banana}`, car cette combinaison n’était pas l’une des combinaisons de matrices d’origine.\n\nPour obtenir des informations de référence et des exemples de configurations, consultez [Syntaxe de flux de travail pour GitHub Actions](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrixinclude).\n\n## Exclusion de configurations de matrice\n\nPour supprimer des configurations spécifiques définies dans la matrice, utilisez `jobs.<job_id>.strategy.matrix.exclude`.\n\nPar exemple, le workflow suivant exécute neuf travaux : un travail pour chacune des 12 configurations, moins un travail exclu qui correspond à `{os: macos-latest, version: 12, environment: production}`, et les deux travaux exclus qui correspondent à `{os: windows-latest, version: 16}`.\n\n```yaml\nstrategy:\n  matrix:\n    os: [macos-latest, windows-latest]\n    version: [12, 14, 16]\n    environment: [staging, production]\n    exclude:\n      - os: macos-latest\n        version: 12\n        environment: production\n      - os: windows-latest\n        version: 16\nruns-on: ${{ matrix.os }}\n```\n\nPour obtenir des informations de référence, consultez [Syntaxe de flux de travail pour GitHub Actions](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrixexclude)\n\n## Utilisation d’une sortie pour définir deux matrices\n\nVous pouvez utiliser la sortie d’une tâche pour définir des matrices pour plusieurs travaux.\n\nPar exemple, le flux de travail suivant montre comment définir une matrice de valeurs dans une tâche, utiliser cette matrice dans une deuxième tâche pour produire des artefacts, puis consommer ces artefacts dans une troisième tâche. Chaque artefact est associé à une valeur de la matrice.\n\n```yaml copy\nname: shared matrix\non:\n  push:\n  workflow_dispatch:\n\njobs:\n  define-matrix:\n    runs-on: ubuntu-latest\n\n    outputs:\n      colors: ${{ steps.colors.outputs.colors }}\n\n    steps:\n      - name: Define Colors\n        id: colors\n        run: |\n          echo 'colors=[\"red\", \"green\", \"blue\"]' >> \"$GITHUB_OUTPUT\"\n\n  produce-artifacts:\n    runs-on: ubuntu-latest\n    needs: define-matrix\n    strategy:\n      matrix:\n        color: ${{ fromJSON(needs.define-matrix.outputs.colors) }}\n\n    steps:\n      - name: Define Color\n        env:\n          color: ${{ matrix.color }}\n        run: |\n          echo \"$color\" > color\n      - name: Produce Artifact\n        uses: actions/upload-artifact@v4\n        with:\n          name: ${{ matrix.color }}\n          path: color\n\n  consume-artifacts:\n    runs-on: ubuntu-latest\n    needs:\n    - define-matrix\n    - produce-artifacts\n    strategy:\n      matrix:\n        color: ${{ fromJSON(needs.define-matrix.outputs.colors) }}\n\n    steps:\n    - name: Retrieve Artifact\n      uses: actions/download-artifact@v5\n      with:\n        name: ${{ matrix.color }}\n\n    - name: Report Color\n      run: |\n        cat color\n```\n\n## Gestion des échecs\n\nPour contrôler la façon dont les échecs de travaux sont gérés, utilisez `jobs.<job_id>.strategy.fail-fast` et `jobs.<job_id>.continue-on-error`.\n\nVous pouvez utiliser `jobs.<job_id>.strategy.fail-fast` et `jobs.<job_id>.continue-on-error` ensemble. Par exemple, le workflow suivant démarre quatre travaux. Pour chaque travail, `continue-on-error` est déterminé par la valeur de `matrix.experimental`. En cas d’échec de l’un des travaux avec `continue-on-error: false`, tous les travaux en cours ou en file d’attente sont annulés. En cas d’échec du travail avec `continue-on-error: true`, les autres travaux ne sont pas affectés.\n\n```yaml\njobs:\n  test:\n    runs-on: ubuntu-latest\n    continue-on-error: ${{ matrix.experimental }}\n    strategy:\n      fail-fast: true\n      matrix:\n        version: [6, 7, 8]\n        experimental: [false]\n        include:\n          - version: 9\n            experimental: true\n```\n\nPour obtenir des informations de référence, consultez [`jobs.<job_id>.strategy.fail-fast`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategyfail-fast) et [`jobs.<job_id>.continue-on-error`](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontinue-on-error).\n\n## Définition du nombre maximal de travaux simultanés\n\nPour définir le nombre maximal de travaux pouvant s’exécuter simultanément lors de l’utilisation d’une stratégie de travail `matrix`, utilisez `jobs.<job_id>.strategy.max-parallel`.\n\nPar exemple, le workflow suivant exécute un maximum de deux travaux à la fois, même s’il existe des agents disponibles pour exécuter les six travaux en même temps.\n\n```yaml\njobs:\n  example_matrix:\n    strategy:\n      max-parallel: 2\n      matrix:\n        version: [10, 12, 14]\n        os: [ubuntu-latest, windows-latest]\n```\n\nPour obtenir des informations de référence, consultez [Syntaxe de flux de travail pour GitHub Actions](/fr/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymax-parallel)."}