GitHub Actions: matrix и reusable workflows

Мы просто и по делу рассказываем про ИИ-инструменты для работы: сравнения, пошаговые гайды, бесплатные альтернативы и реальные сценарии применения. Помогаем выбрать между ChatGPT, Gemini, Claude, локальными моделями и десятками узкоспециализированных сервисов — от дизайна и HR до аналитики и SEO. Меньше хайпа, больше практики и экономии времени каждый день.

github actionsmatrixreusable workflows

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 и инженерным практикам.

🗣 Подборки каналов
🧠 Каталог ботов и приложений
🗺 Навигация

Читайте так же