Сведения о стратегиях матрицы
Стратегия матрицы позволяет использовать переменные в одном определении задания для автоматического создания нескольких выполнений заданий, основанных на сочетаниях переменных. Например, можно использовать стратегию матрицы для тестирования кода в нескольких версиях языка или в нескольких операционных системах.
Добавление стратегии матрицы в задание рабочего процесса
Используйте jobs.<job_id>.strategy.matrix
для создания матрицы различных конфигураций заданий В матрице определите одну или несколько переменных, за которыми следует массив значений. Например, в указанной ниже матрице есть переменная под именем version
со значением [10, 12, 14]
и переменная под именем os
со значением [ubuntu-latest, windows-latest]
:
jobs:
example_matrix:
strategy:
matrix:
version: [10, 12, 14]
os: [ubuntu-latest, windows-latest]
Задание будет выполняться для каждой возможной комбинации переменных. В этом примере рабочий процесс будет выполнять шесть заданий, по одному для каждой комбинации переменных os
и version
.
Приведенная выше матрица создаст задания в следующем порядке.
{version: 10, os: ubuntu-latest}
{version: 10, os: windows-latest}
{version: 12, os: ubuntu-latest}
{version: 12, os: windows-latest}
{version: 14, os: ubuntu-latest}
{version: 14, os: windows-latest}
Справочные сведения и примеры см. в разделе Синтаксис рабочего процесса для GitHub Actions.
Использование контекстов для создания матриц
Чтобы создать матрицы с информацией о запусках рабочих процессов, переменных, средах выполнения, заданиях и шагах, доступ к контекстам с помощью синтаксиса выражения ${{ <context> }}
. Дополнительные сведения о контекстах см. в разделе Справочник по контекстам.
Например, следующий рабочий процесс активирует событие repository_dispatch
и использует сведения из его полезных данных для построения матрицы. При создании события диспетчеризации репозитория с полезными данными, как показано ниже, переменная version
матрицы будет иметь значение [12, 14, 16]
. Дополнительные сведения об триггере repository_dispatch
см. в разделе События, инициирующие рабочие процессы.
{
"event_type": "test",
"client_payload": {
"versions": [12, 14, 16]
}
}
on:
repository_dispatch:
types:
- test
jobs:
example_matrix:
runs-on: ubuntu-latest
strategy:
matrix:
version: ${{ github.event.client_payload.versions }}
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.version }}
Развертывание или добавление конфигураций матрицы
Чтобы развернуть существующие конфигурации матрицы или добавить новые конфигурации, используйте jobs.<job_id>.strategy.matrix.include
. Значение include
является списком объектов.
Например, рассмотрим следующую матрицу.
strategy:
matrix:
fruit: [apple, pear]
animal: [cat, dog]
include:
- color: green
- color: pink
animal: cat
- fruit: apple
shape: circle
- fruit: banana
- fruit: banana
animal: cat
Это приведет к шести заданиям со следующими сочетаниями матриц.
{fruit: apple, animal: cat, color: pink, shape: circle}
{fruit: apple, animal: dog, color: green, shape: circle}
{fruit: pear, animal: cat, color: pink}
{fruit: pear, animal: dog, color: green}
{fruit: banana}
{fruit: banana, animal: cat}
Каждая include
запись была применена следующим образом.
{color: green}
добавляется ко всем исходным комбинациям матриц, так как его можно добавить без перезаписи любой части исходных комбинаций.{color: pink, animal: cat}
добавляетcolor:pink
только к исходным комбинациям матриц, которые включаютanimal: cat
. Это перезаписываетcolor: green
, добавленный предыдущей записьюinclude
.{fruit: apple, shape: circle}
добавляетshape: circle
только к исходным комбинациям матриц, которые включаютfruit: apple
.{fruit: banana}
невозможно добавить ни в какую исходную комбинацию матриц без перезаписи значения, поэтому он добавляется в качестве дополнительной комбинации матриц.{fruit: banana, animal: cat}
невозможно добавить ни в какую исходную комбинацию матриц без перезаписи значения, поэтому он добавляется в качестве дополнительной комбинации матриц. Он не добавляется к комбинации матриц{fruit: banana}
, так как эта комбинация не была одной из исходных комбинаций матриц.
Справочные и примеры конфигураций см. в разделе Синтаксис рабочего процесса для GitHub Actions.
Исключение конфигураций матрицы
Чтобы удалить конкретные конфигурации, определенные в матрице, используйте jobs.<job_id>.strategy.matrix.exclude
.
Например, следующий рабочий процесс будет выполнять девять заданий: одно задание для каждой из 12 конфигураций, минус одно исключенное задание, которое совпадает с {os: macos-latest, version: 12, environment: production}
, и два исключенных задания, которые совпадают с {os: windows-latest, version: 16}
.
strategy:
matrix:
os: [macos-latest, windows-latest]
version: [12, 14, 16]
environment: [staging, production]
exclude:
- os: macos-latest
version: 12
environment: production
- os: windows-latest
version: 16
runs-on: ${{ matrix.os }}
Справочные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions
Использование выходных данных для определения двух матриц
Выходные данные из одного задания можно использовать для определения матриц для нескольких заданий.
Например, в следующем рабочем процессе показано, как определить матрицу значений в одном задании, использовать эту матрицу во втором задании для создания артефактов, а затем использовать эти артефакты в третьем задании. Каждый артефакт связан со значением из матрицы.
name: shared matrix on: push: workflow_dispatch: jobs: define-matrix: runs-on: ubuntu-latest outputs: colors: ${{ steps.colors.outputs.colors }} steps: - name: Define Colors id: colors run: | echo 'colors=["red", "green", "blue"]' >> "$GITHUB_OUTPUT" produce-artifacts: runs-on: ubuntu-latest needs: define-matrix strategy: matrix: color: ${{ fromJSON(needs.define-matrix.outputs.colors) }} steps: - name: Define Color env: color: ${{ matrix.color }} run: | echo "$color" > color - name: Produce Artifact uses: actions/upload-artifact@v4 with: name: ${{ matrix.color }} path: color consume-artifacts: runs-on: ubuntu-latest needs: - define-matrix - produce-artifacts strategy: matrix: color: ${{ fromJSON(needs.define-matrix.outputs.colors) }} steps: - name: Retrieve Artifact uses: actions/download-artifact@v4 with: name: ${{ matrix.color }} - name: Report Color run: | cat color
name: shared matrix
on:
push:
workflow_dispatch:
jobs:
define-matrix:
runs-on: ubuntu-latest
outputs:
colors: ${{ steps.colors.outputs.colors }}
steps:
- name: Define Colors
id: colors
run: |
echo 'colors=["red", "green", "blue"]' >> "$GITHUB_OUTPUT"
produce-artifacts:
runs-on: ubuntu-latest
needs: define-matrix
strategy:
matrix:
color: ${{ fromJSON(needs.define-matrix.outputs.colors) }}
steps:
- name: Define Color
env:
color: ${{ matrix.color }}
run: |
echo "$color" > color
- name: Produce Artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.color }}
path: color
consume-artifacts:
runs-on: ubuntu-latest
needs:
- define-matrix
- produce-artifacts
strategy:
matrix:
color: ${{ fromJSON(needs.define-matrix.outputs.colors) }}
steps:
- name: Retrieve Artifact
uses: actions/download-artifact@v4
with:
name: ${{ matrix.color }}
- name: Report Color
run: |
cat color
Обработка сбоев
Чтобы управлять обработкой сбоев заданий, используйте jobs.<job_id>.strategy.fail-fast
и jobs.<job_id>.continue-on-error
.
Можно использовать 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
другие задания не будут затронуты.
jobs:
test:
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.experimental }}
strategy:
fail-fast: true
matrix:
version: [6, 7, 8]
experimental: [false]
include:
- version: 9
experimental: true
Справочные сведения см jobs.<job_id>.strategy.fail-fast
. и jobs.<job_id>.continue-on-error
.
Определение максимального числа параллельных заданий
Для настройки максимального числа заданий, которые могут выполняться одновременно при применении стратегии задания matrix
, используйте jobs.<job_id>.strategy.max-parallel
.
Например, следующий рабочий процесс будет выполнять не более двух заданий одновременно, даже если для одновременного выполнения всех шести заданий доступны средства выполнения.
jobs:
example_matrix:
strategy:
max-parallel: 2
matrix:
version: [10, 12, 14]
os: [ubuntu-latest, windows-latest]
Справочные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.