Матричные сборки для нескольких сред
Используйте матричные стратегии для параллельного запуска заданий в нескольких версиях языков, операционных системах или конфигурациях.
«Матричные сборки для нескольких сред» — бесплатный урок CI/CD with GitHub Actions & DevOps Pipelines на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CI/CD with GitHub Actions & DevOps Pipelines, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CI/CD with GitHub Actions & DevOps Pipelines содержит 4 уроков всего.
Что такое матричные сборки?
Добро пожаловать к изучению мощной возможности GitHub Actions — матричных сборок! Представьте, что Вам нужно протестировать код в разных средах, например в различных операционных системах или версиях языков программирования.
Вместо создания отдельного рабочего процесса для каждой комбинации матричные сборки позволяют определить набор переменных, а GitHub Actions автоматически запустит задания для каждой возможной комбинации этих переменных.
Зачем нужны матричные сборки?
Матричные сборки невероятно полезны для следующих задач:
- Кроссплатформенное тестирование: проверка работы приложения в Windows, macOS и Linux.
- Совместимость с несколькими версиями: тестирование с разными версиями Node.js, Python или базы данных.
- Параллельное выполнение: одновременный запуск всех этих тестов, что значительно экономит время.
Они помогают эффективно обеспечить более полное покрытие тестами.
Базовый синтаксис матрицы
Матрица определяется в разделе strategy задания. Внутри strategy.matrix перечислите одну или несколько переменных, каждая из которых содержит массив значений.
Затем GitHub Actions создаёт задание для каждой комбинации. Посмотрим, как это выглядит:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14, 16, 18]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm testПример: несколько версий Node.js
В предыдущем фрагменте мы определили переменную node-version с тремя значениями: 14, 16 и 18.
Это единственное определение задания запустит три отдельных задания. Каждое из них будет выполняться в ubuntu-latest, но использовать другую версию Node.js. Благодаря этому Вы убедитесь, что проект работает со всеми этими версиями.
Объединение нескольких переменных матрицы
Вы не ограничены всего одной переменной! В матрице можно объединять несколько переменных. Например, Вы можете захотеть протестировать разные операционные системы с разными версиями Node.js.
Просто добавьте дополнительные пары «ключ — значение» в strategy.matrix. Общее количество заданий будет равно произведению количества значений каждой переменной.
Пример: матрица ОС и Node.js
Вот как настроить матрицу для тестирования в Ubuntu и Windows с версиями Node.js 16 и 18.
В результате будет создано 2 (OS) * 2 (версии Node.js) = 4 отдельных задания.
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16, 18]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm testНастройка комбинаций с помощью ключевого слова «include»
Иногда Вам нужны определенные комбинации, которые не входят в стандартное декартово произведение, или Вы хотите добавить дополнительные переменные для отдельных сборок. Используйте include, чтобы добавить новые записи матрицы.
Например, Вы можете захотеть запустить дополнительный тест только в Ubuntu с Node.js 14 или передать определенную переменную окружения конкретной комбинации ОС и версии.
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16, 18]
include:
- os: ubuntu-latest
node-version: 14
test-suite: 'full'Исключение определенных комбинаций
Что делать, если какая-то комбинация заведомо приводит к ошибке или не имеет отношения к проекту? Ключевое слово exclude позволяет удалить определенные конфигурации из матрицы.
Это помогает избежать ненужных запусков заданий и сосредоточиться на релевантных тестовых случаях.
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node-version: [16, 18, 20]
exclude:
- os: windows-latest
node-version: 16Доступ к переменным матрицы
В шагах задания можно получить доступ к текущим значениям переменных матрицы с помощью синтаксиса ${{ matrix.variable_name }}. Это особенно важно для настройки инструментов или выполнения команд, специфичных для каждой комбинации матрицы.
Например, ${{ matrix.os }} динамически задаёт операционную систему исполнителя, а ${{ matrix.node-version }} настраивает действие для Node.js.
Практическое применение
Матричные сборки полезны в следующих случаях:
- Разработка библиотек: тестирование с несколькими версиями зависимости.
- Многоязычные проекты: сборка и тестирование компонентов, написанных на разных языках или рассчитанных на разные компиляторы.
- Совместимость с браузерами: тестирование веб-приложений в разных браузерах, если используемый инструмент это поддерживает.
Они упрощают сложные сценарии тестирования, превращая их в компактные рабочие процессы, удобные для сопровождения.
Задача о матричной сборке
Рассмотрим рабочий процесс GitHub Actions, использующий стратегию матрицы. Матрица определена следующим образом:
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
python-version: [3.8, 3.9]
exclude:
- os: macos-latest
python-version: 3.8
Сколько заданий будет создано этой конфигурацией матрицы?
Повторение: матричные сборки
Отличная работа! Вы изучили матричные сборки в GitHub Actions.
- Они позволяют запускать задания для нескольких комбинаций переменных: ОС, версий языков и других параметров.
- Определяются с помощью
strategy.matrixвнутри задания. includeдобавляет определенные комбинации, аexcludeудаляет их.- Доступ к переменным осуществляется через
${{ matrix.variable_name }}.
Матричные сборки необходимы для эффективного и комплексного тестирования в разнообразных средах. Продолжайте практиковаться, чтобы освоить их в совершенстве!
Часто задаваемые вопросы
Урок «Матричные сборки для нескольких сред» бесплатный?
Да — полный текст урока «Матричные сборки для нескольких сред» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CI/CD with GitHub Actions & DevOps Pipelines, подпишись на CoddyKit PRO. Курс CI/CD with GitHub Actions & DevOps Pipelines содержит 4 уроков всего.
Чему я научусь в уроке «Матричные сборки для нескольких сред»?
Используйте матричные стратегии для параллельного запуска заданий в нескольких версиях языков, операционных системах или конфигурациях. Ты практикуешь CI/CD with GitHub Actions & DevOps Pipelines с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CI/CD with GitHub Actions & DevOps Pipelines?
Предыдущий опыт не требуется. CI/CD with GitHub Actions & DevOps Pipelines на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Матричные сборки для нескольких сред»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CI/CD with GitHub Actions & DevOps Pipelines?
Да. Каждый урок CI/CD with GitHub Actions & DevOps Pipelines включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Матричные сборки для нескольких сред
- Кэширование зависимостей для ускорения
- Повторно используемые рабочие процессы и действия
- Условное выполнение и зависимости заданий