GitHub Actions часто начинают с простого CI: собрать проект, прогнать тесты, задеплоить. Но когда репозиториев и сценариев становится больше, пайплайны быстро превращаются в копипасту. Здесь и помогают **matrix** и **reusable workflows**.
1. Matrix: запуск одного workflow в разных вариантах
matrix нужен, когда нужно прогнать одну и ту же задачу:
- на разных версиях Node.js / Python
- на разных ОС
- с разными конфигурациями сборки
Пример: тестирование Node.js-приложения сразу на нескольких версиях.
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}
- run: npm ci
- run: npm test
Что это даёт:
- меньше дублирования YAML
- быстрый поиск несовместимостей
- удобное масштабирование CI
Полезно знать:
include— добавить уникальные параметры в матрицуexclude— исключить ненужные комбинацииfail-fast: false— не останавливать все jobs при первом падении
2. Reusable workflows: переиспользуемые workflow между проектами
Если в компании 5–20 репозиториев, одинаковые пайплайны начинают мешать поддержке. reusable workflows позволяют вынести общий процесс в один файл и вызывать его из других workflow.
Файл переиспользуемого workflow:
on:
workflow_call:
inputs:
node-version:
required: true
type: string
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
- run: npm ci
- run: npm test
Вызов из другого workflow:
jobs:
call-tests:
uses: org/repo/.github/workflows/node-test.yml@main
with:
node-version: "20"
Плюсы:
- единый стандарт CI/CD 🧩
- меньше ошибок из-за расхождений
- обновления в одном месте
- проще онбординг новых команд
3. Когда использовать вместе
Лучший сценарий — объединить оба подхода:
- reusable workflow хранит общую логику
- matrix передаёт разные параметры для массового запуска
Так можно централизованно тестировать сервисы на нескольких версиях рантайма без копирования кода.
4. Практические советы
- Версионируйте reusable workflows через теги, а не только
main - Не передавайте секреты без необходимости 🔐
- Держите steps маленькими и читаемыми
- Добавляйте кеширование зависимостей для ускорения CI ⚡
- Проверяйте права
permissions, чтобы не давать workflow лишний доступ
Итог
matrix решает задачу масштабного тестирования, а reusable workflows — задачу повторного использования и стандартизации. Вместе они делают GitHub Actions не просто набором YAML-файлов, а полноценной платформой автоматизации для команды 💡
📌 Ниже стоит посмотреть подборку каналов про IT — там много полезного по DevOps, CI/CD и инженерным практикам.