{"meta":{"title":"Varianten von Aufgaben in einem Workflow ausführen","intro":"Erstelle eine Matrix, um Variationen für jeden Auftrag zu definieren.","product":"GitHub Actions","breadcrumbs":[{"href":"/de/actions","title":"GitHub Actions"},{"href":"/de/actions/how-tos","title":"Anleitungen"},{"href":"/de/actions/how-tos/write-workflows","title":"Schreiben von Workflows"},{"href":"/de/actions/how-tos/write-workflows/choose-what-workflows-do","title":"Auswählen, was in Workflows passiert"},{"href":"/de/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations","title":"Ausführen von Jobvarianten"}],"documentType":"article"},"body":"# Varianten von Aufgaben in einem Workflow ausführen\n\nErstelle eine Matrix, um Variationen für jeden Auftrag zu definieren.\n\n## Informationen zu Matrixstrategien\n\nMithilfe einer Matrixstrategie kannst du Variablen in einer Auftragsdefinition verwenden, um automatisch mehrere Auftragsausführungen zu erstellen, die auf Kombinationen dieser Variablen basieren. Mithilfe einer Matrixstrategie kannst du deinen Code beispielsweise in mehreren Versionen einer Sprache oder auf mehreren Betriebssystemen testen.\n\n## Hinzufügen einer Matrixstrategie zu deinem Workflowauftrag\n\nVerwende `jobs.<job_id>.strategy.matrix`, um eine Matrix verschiedener Auftragskonfigurationen zu definieren. Definiere innerhalb der Matrix eine oder mehrere Variablen, gefolgt von einem Array an Werten. Die folgende Matrix verfügt beispielsweise über eine Variable namens `version` mit dem Wert `[10, 12, 14]` und über eine Variable namens `os` mit dem Wert `[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\nFür jede mögliche Kombination der Variablen wird ein Job ausgeführt. In diesem Beispiel führt der Workflow sechs Aufträge aus: einen für jede Kombination der Variablen `os` und `version`.\n\nDie Matrix oben erstellt die Aufträge in der folgenden Reihenfolge:\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\nReferenzinformationen und Beispiele findest du unter [Workflowsyntax für GitHub Actions](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrix).\n\n## Erstellen von Matrizen mithilfe von Kontexten\n\nZum Erstellen von Matrizen mit Informationen zu Workflowausführungen, Variablen, Läuferumgebungen, Aufträgen und Schritten greifen Sie mithilfe der `${{ <context> }}` Ausdruckssyntax auf Kontexte zu. Weitere Informationen zu Kontexten findest du unter [Kontextreferenz](/de/actions/reference/workflows-and-actions/contexts).\n\nBeispielsweise wird der folgende Workflow für das `repository_dispatch`-Ereignis ausgelöst und verwendet Informationen aus der Ereignisnutzlast, um die Matrix zu erstellen. Wenn ein Repositorydispatchereignis mit einer Nutzlast wie der folgenden erstellt wird, hat die Matrixvariable `version` einen Wert von `[12, 14, 16]`. Weitere Informationen zum Trigger `repository_dispatch` findest du unter [Ereignisse zum Auslösen von Workflows](/de/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## Erweitern oder Hinzufügen von Matrixkonfigurationen\n\nVerwende `jobs.<job_id>.strategy.matrix.include`, um vorhandene Matrixkonfigurationen zu erweitern oder neue Konfigurationen hinzuzufügen. Der Wert von `include` ist eine Liste von Objekten.\n\nBetrachte etwa die folgende Matrix:\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\nDies führt zu sechs Aufträgen mit den folgenden Matrixkombinationen:\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\nJeder `include`-Eintrag wurde auf folgende Weise angewendet.\n\n* `{color: green}` wird allen ursprünglichen Matrixkombinationen hinzugefügt, da sie hinzugefügt werden kann, ohne einen Teil der ursprünglichen Kombinationen zu überschreiben.\n* `{color: pink, animal: cat}` fügt `color:pink` nur den ursprünglichen Matrixkombinationen hinzu, die `animal: cat` enthalten. Dadurch wird die `color: green` überschrieben, die zuvor durch den vorherigen `include`-Eintrag hinzugefügt wurde.\n* `{fruit: apple, shape: circle}` fügt `shape: circle` nur den ursprünglichen Matrixkombinationen hinzu, die `fruit: apple` enthalten.\n* `{fruit: banana}` kann zu keiner ursprünglichen Matrixkombination hinzugefügt werden, ohne dass dabei ein Wert überschrieben wird. Daher wird sie als zusätzliche Matrixkombination hinzugefügt.\n* `{fruit: banana, animal: cat}` kann zu keiner ursprünglichen Matrixkombination hinzugefügt werden, ohne dass dabei ein Wert überschrieben wird. Daher wird sie als zusätzliche Matrixkombination hinzugefügt. Die `{fruit: banana}`-Matrixkombination wird nicht hinzugefügt, da die Kombination keine der ursprünglichen Matrixkombinationen war.\n\nReferenz- und Beispielkonfigurationen findest du unter [Workflowsyntax für GitHub Actions](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrixinclude).\n\n## Matrixkonfigurationen ausschließen\n\nUm bestimmte Konfigurationen zu entfernen, die in der Matrix definiert sind, verwende `jobs.<job_id>.strategy.matrix.exclude`.\n\nDer folgende Workflow führt z. B. neun Aufträge aus: ein Auftrag für jede der 12 Konfigurationen, minus der ausgeschlossenen Aufgabe, die mit `{os: macos-latest, version: 12, environment: production}` übereinstimmt, und die beiden ausgeschlossenen Aufträge, die mit `{os: windows-latest, version: 16}` übereinstimmen.\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\nReferenzinformationen findest du unter [Workflowsyntax für GitHub Actions](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrixexclude).\n\n## Verwenden einer Ausgabe zum Definieren von zwei Matrizen\n\nSie können die Ausgabe aus einem Auftrag verwenden, um Matrizen für mehrere Aufträge zu definieren.\n\nDer folgende Workflow veranschaulicht beispielsweise, wie Sie eine Matrix von Werten in einem Auftrag definieren, diese Matrix in einem zweiten Auftrag verwenden, um Artefakte zu erzeugen, und diese Artefakte dann in einem dritten Auftrag verwenden. Jedes Artefakt ist einem Wert aus der Matrix zugeordnet.\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## Behandeln von Fehlern\n\nVerwende `jobs.<job_id>.strategy.fail-fast` und `jobs.<job_id>.continue-on-error`, um zu steuern, wie Auftragsfehler behandelt werden.\n\nDu kannst `jobs.<job_id>.strategy.fail-fast` und `jobs.<job_id>.continue-on-error` gemeinsam einsetzen. Der folgende Workflow startet beispielsweise vier Aufträge. Für jeden Auftrag wird `continue-on-error` durch den Wert von `matrix.experimental` bestimmt. Wenn bei einem der Aufträge mit `continue-on-error: false` ein Fehler auftritt, werden alle in Verarbeitung oder in der Warteschlange befindlichen Aufträge abgebrochen. Wenn beim Auftrag mit `continue-on-error: true` ein Fehler auftritt, sind die anderen Aufträge nicht betroffen.\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\nReferenzinformationen findest du unter [`jobs.<job_id>.strategy.fail-fast`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategyfail-fast) und [`jobs.<job_id>.continue-on-error`](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontinue-on-error).\n\n## Definieren der maximalen Anzahl von gleichzeitigen Aufträgen\n\nUm die maximale Anzahl von Aufträgen festzulegen, die bei der Auftragsstrategie `matrix` gleichzeitig ausgeführt werden können, verwende `jobs.<job_id>.strategy.max-parallel`.\n\nDer folgende Workflow führt zum Beispiel maximal zwei Aufträge auf einmal aus, auch wenn es Runner gibt, die alle sechs Aufträge auf einmal ausführen können.\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\nReferenzinformationen findest du unter [Workflowsyntax für GitHub Actions](/de/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymax-parallel)."}