Matrix builds

Тема дорожной карты · GitHub Actions

Matrix-сборки в GitHub Actions позволяют одному workflow job разворачиваться во множество параллельных jobs путём объявления карты переменных strategy.matrix, таких как версия языка, операционная система или архитектура. Каждая комбинация порождает изолированный запуск job на собственном runner, поэтому matrix-сборка — это стандартный способ проверить проект на совместимость с несколькими версиями Node.js, Python или JDK, а также одновременно выполнять кросс-компиляцию на ubuntu-latest, windows-latest и macos-latest. Matrix-сборки разворачивают оси через декартово произведение, но можно обрезать ненужные перестановки с помощью exclude, добавлять нестандартные комбинации через include и разрешать завершение одного шарда с ошибкой, не прерывая остальные, устанавливая fail-fast: false. Сжимая то, что иначе потребовало бы множества дублирующихся файлов workflow, в один декларативный блок, matrix-сборки поддерживают CI/CD-пайплайны в принципе DRY, одновременно обеспечивая широкое покрытие совместимости.

Как это работает

Matrix builds: strategy: matrix: { os: [ubuntu, windows], node: [18, 20, 22] } гоняет job на комбинацию (тут 6 jobs). include: добавляет конкретные комбинации; exclude: убирает. fail-fast: false гоняет все комбинации даже при сбоях. max-parallel: ограничивает конкурентность. Matrix-outputs доступны через ${{ matrix.os }}. Каждая matrix-ячейка — независимый job: своя VM, свой state.

Когда применять

Matrix — для тестов cross-platform / cross-version (библиотеки на Node 18/20/22, Python 3.9/3.10/3.11/3.12). fail-fast: false — когда хотите видеть все падения, не только первое. include: — для "Node 20 + Postgres 16 специфичного теста" без взрыва matrix. Размер matrix разумный — 20 ячеек × 5 мин = 100 мин compute на PR.

Типичные ошибки

Ловушки Matrix builds: matrix взрывается (3 OS × 4 Node × 3 БД = 36 jobs); flaky-тесты в matrix роняют одну ячейку случайно + все дебажат не ту; нет fail-fast: false — теряете видимость других падений, когда одна ячейка падает рано.

Связанные понятия

Полезные ресурсы