max-parallel

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

Ключ max-parallel под strategy ограничивает количество matrix-jobs одного запуска workflow, которые могут выполняться одновременно, независимо от доступного числа runner. Это важный инструмент для управления параллельными процессами и предотвращения перегрузки системы. Например, установка max-parallel: 2 для matrix с шестью ячейками заставляет GitHub Actions планировать job тремя волнами по два. Это стандартный рычаг для защиты API с лимитом запросов, общих баз данных или небольшого пула self-hosted runners от перегрузки.

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

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

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

Matrix-стратегия используется для тестирования cross-platform и cross-version. Например, для тестирования библиотек на Node 18, 20 и 22, или Python 3.9, 3.10, 3.11 и 3.12. fail-fast: false позволяет видеть все сбои, а не только первое. include: позволяет добавлять специфические тесты без взрыва matrix. Размер matrix должен быть разумным, чтобы не перегружать систему. Например, 20 ячеек, каждая из которых выполняется 5 минут, потребуют 100 минут вычислительного времени на каждый pull request.

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

Одной из распространенных ошибок является неправильное использование ключа max-parallel. Например, matrix может взорваться, если количество комбинаций слишком велико (например, 3 OS × 4 Node × 3 БД = 36 jobs). В этом случае flaky-тесты в matrix могут случайно ронять одну ячейку, что приводит к дебагированию неправильной ячейки. Если не используется fail-fast: false, теряется видимость других сбоев, когда одна ячейка падает рано.

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

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