0Pricing
DevOps Bootcamp · Урок

Матричные сборки для нескольких сред

Используйте матричные стратегии для параллельного запуска заданий в нескольких версиях языков, операционных системах или конфигурациях.

«Матричные сборки для нескольких сред» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 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) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «Матричные сборки для нескольких сред»?

Используйте матричные стратегии для параллельного запуска заданий в нескольких версиях языков, операционных системах или конфигурациях. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Матричные сборки для нескольких сред»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Матричные сборки для нескольких сред
  2. Кэширование зависимостей для ускорения
  3. Повторно используемые рабочие процессы и действия
  4. Условное выполнение и зависимости заданий
← Назад к DevOps Bootcamp