{"meta":{"title":"Выполнение вариантов заданий в рабочем процессе","intro":"Создайте матрицу для определения вариантов для каждого задания.","product":"GitHub Actions","breadcrumbs":[{"href":"/ru/actions","title":"GitHub Actions"},{"href":"/ru/actions/how-tos","title":"Инструкции"},{"href":"/ru/actions/how-tos/write-workflows","title":"Написание рабочих процессов"},{"href":"/ru/actions/how-tos/write-workflows/choose-what-workflows-do","title":"Выбор рабочих процессов"},{"href":"/ru/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations","title":"Выполнение вариантов задания"}],"documentType":"article"},"body":"# Выполнение вариантов заданий в рабочем процессе\n\nСоздайте матрицу для определения вариантов для каждого задания.\n\n## Сведения о стратегиях матрицы\n\nСтратегия матрицы позволяет использовать переменные в одном определении задания для автоматического создания нескольких выполнений заданий, основанных на сочетаниях переменных. Например, можно использовать стратегию матрицы для тестирования кода в нескольких версиях языка или в нескольких операционных системах.\n\n## Добавление стратегии матрицы в задание рабочего процесса\n\nИспользуйте `jobs.<job_id>.strategy.matrix` для создания матрицы различных конфигураций заданий В матрице определите одну или несколько переменных, за которыми следует массив значений. Например, в указанной ниже матрице есть переменная под именем `version` со значением `[10, 12, 14]` и переменная под именем `os` со значением `[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\nЗадание будет выполняться для каждой возможной комбинации переменных. В этом примере рабочий процесс будет выполнять шесть заданий, по одному для каждой комбинации переменных `os` и `version`.\n\nПриведенная выше матрица создаст задания в следующем порядке.\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\nСправочные сведения и примеры см. в разделе [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrix).\n\n## Использование контекстов для создания матриц\n\nЧтобы создать матрицы с информацией о запусках рабочих процессов, переменных, средах выполнения, заданиях и шагах, доступ к контекстам с помощью синтаксиса `${{ <context> }}` выражения. Дополнительные сведения о контекстах см. в разделе [Справочник по контекстам](/ru/actions/reference/workflows-and-actions/contexts).\n\nНапример, следующий рабочий процесс активирует событие `repository_dispatch` и использует сведения из его полезных данных для построения матрицы. При создании события диспетчеризации репозитория с полезными данными, как показано ниже, переменная `version` матрицы будет иметь значение `[12, 14, 16]`. Дополнительные сведения об триггере `repository_dispatch` см. в разделе [События, инициирующие рабочие процессы](/ru/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## Развертывание или добавление конфигураций матрицы\n\nЧтобы развернуть существующие конфигурации матрицы или добавить новые конфигурации, используйте `jobs.<job_id>.strategy.matrix.include`. Значение `include` является списком объектов.\n\nНапример, рассмотрим следующую матрицу.\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\nЭто приведет к шести заданиям со следующими сочетаниями матриц.\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\nКаждая `include` запись была применена следующим образом.\n\n* `{color: green}` добавляется ко всем исходным комбинациям матриц, так как его можно добавить без перезаписи любой части исходных комбинаций.\n* `{color: pink, animal: cat}` добавляет `color:pink` только к исходным комбинациям матриц, которые включают `animal: cat`. Это перезаписывает `color: green`, добавленный предыдущей записью `include`.\n* `{fruit: apple, shape: circle}` добавляет `shape: circle` только к исходным комбинациям матриц, которые включают `fruit: apple`.\n* `{fruit: banana}` невозможно добавить ни в какую исходную комбинацию матриц без перезаписи значения, поэтому он добавляется в качестве дополнительной комбинации матриц.\n* `{fruit: banana, animal: cat}` невозможно добавить ни в какую исходную комбинацию матриц без перезаписи значения, поэтому он добавляется в качестве дополнительной комбинации матриц. Он не добавляется к комбинации матриц `{fruit: banana}`, так как эта комбинация не была одной из исходных комбинаций матриц.\n\nСправочные и примеры конфигураций см. в разделе [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrixinclude).\n\n## Исключение конфигураций матрицы\n\nЧтобы удалить конкретные конфигурации, определенные в матрице, используйте `jobs.<job_id>.strategy.matrix.exclude`.\n\nНапример, следующий рабочий процесс будет выполнять девять заданий: одно задание для каждой из 12 конфигураций, минус одно исключенное задание, которое совпадает с `{os: macos-latest, version: 12, environment: production}`, и два исключенных задания, которые совпадают с `{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\nСправочные сведения см. в разделе [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymatrixexclude)\n\n## Использование выходных данных для определения двух матриц\n\nВыходные данные из одного задания можно использовать для определения матриц для нескольких заданий.\n\nНапример, в следующем рабочем процессе показано, как определить матрицу значений в одном задании, использовать эту матрицу во втором задании для создания артефактов, а затем использовать эти артефакты в третьем задании. Каждый артефакт связан со значением из матрицы.\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## Обработка сбоев\n\nЧтобы управлять обработкой сбоев заданий, используйте `jobs.<job_id>.strategy.fail-fast` и `jobs.<job_id>.continue-on-error`.\n\nМожно использовать `jobs.<job_id>.strategy.fail-fast` и `jobs.<job_id>.continue-on-error` совместно. Например, следующий рабочий процесс запустит четыре задания. Для каждого задания `continue-on-error` определяется значением `matrix.experimental`. При сбое любого из заданий с `continue-on-error: false` все выполняемые или помещенные в очередь задания будут отменены. При сбое задания с `continue-on-error: true` другие задания не будут затронуты.\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\nСправочные сведения см [`jobs.<job_id>.strategy.fail-fast`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategyfail-fast) . и [`jobs.<job_id>.continue-on-error`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontinue-on-error).\n\n## Определение максимального числа параллельных заданий\n\nДля настройки максимального числа заданий, которые могут выполняться одновременно при применении стратегии задания `matrix`, используйте `jobs.<job_id>.strategy.max-parallel`.\n\nНапример, следующий рабочий процесс будет выполнять не более двух заданий одновременно, даже если для одновременного выполнения всех шести заданий доступны средства выполнения.\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\nСправочные сведения см. в разделе [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstrategymax-parallel)."}