Непрерывная интеграция (CI)

Теория: GitHub Actions

GitHub Actions — бесплатная для публичных репозиториев система непрерывной интеграции. Хекслет использует Actions во всех своих закрытых и открытых проектах (пример). С помощью Github Actions можно делать много полезного:

  • Запустить проверку кода линтером и тестами
  • Выполнить деплой проекта
  • Опубликовать новую версию пакета
  • Подключить оповещения в мессенджер о событиях в репозитории (новые issue, PR)
  • и многое другое

В этом уроке мы разберемся в основных концепциях системы, а затем рассмотрим пример настройки, чтобы быстро начать работу с Actions в своем репозитории.

Github Actions

Общий принцип работы Github Actions такой: в нужном репозитории создается директория .github/workflows. Внутри нее размещаются файлы с описанием шагов, которые нужно выполнить на различные действия. Данные в файлах хранятся в формате YAML. Ниже описание процесса "show-directory", который запускается на пуш в репозиторий. В этом примере описание процесса хранится в файле show-directory.yml. Можно указывать любое имя файла, главное сохранять расширение и чтобы имя соответствовало по смыслу. В терминах Github Actions такое описание процесса называется воркфлоу. В нем определяется, на какие события реагировать и что конкретно делать:

# file: .github/workflows/show-directory.yml
name: show-directory
# on – определяет события, которые запускают воркфлоу
on: push
jobs:
  # build – произвольно выбранное имя задания
  # их может быть больше одного
  build:
    # операционная система для работы воркфлоу
    runs-on: ubuntu-latest
    steps: # список шагов, которые надо выполнить
      # экшен — выполняет какую-то задачу
      # checkout — клонирует репозиторий
      - uses: actions/checkout@v4
      # run – произвольная bash-команда
      # ls -la выведет содержимое текущего репозитория
      - run: ls -la

Этот воркфлоу просто печатает на экран содержимое текущей директории. Реальные воркфлоу выглядят сложнее, но прямо сейчас нам важно ухватить общую структуру, не отвлекаясь на конкретный процесс. У любой системы непрерывной интеграции есть набор блоков, из которых строится процесс выполнения. Он примерно одинаковый для всех за исключением некоторых деталей. Дальше мы кратко пробежимся по этим блокам, а уже в следующих уроках подробно поговорим про некоторые из них.

Основные понятия

На картинке ниже показаны основные концепции GitHub Actions. Разберем их по порядку.

Основные концепции Github Actions

  • Воркфлоу / Workflows

    Каждый репозиторий на GitHub может содержать один или несколько воркфлоу. Каждый воркфлоу определяется в отдельном файле конфигурации в каталоге репозитория .github/workflows. Несколько воркфлоу могут выполняться параллельно.

  • События / Events

    Воркфлоу может запускаться одним или несколькими событиями. Это могут быть внутренние события GitHub (например, пуш, релиз или пул-реквест), запланированные события (запускаются в определенное время — например, cron) или произвольные внешние события (запускаются вызовом Webhook API GitHub).

  • Задания / Jobs

    Воркфлоу состоит из одного или нескольких заданий. Задание содержит набор команд, которые запускаются вместе с рабочим процессом. По умолчанию при запуске воркфлоу все его задания выполняются параллельно, однако между ними можно определить зависимость, чтобы они выполнялись последовательно.

  • Раннеры / Runners

    Каждое задание выполняется на определенном раннере — временном сервере на GitHub с выбранной операционной системой (Linux, macOS или Windows). Также существуют автономные раннеры, которые позволяют создать свое окружение для выполнения экшена.

  • Шаги / Steps

    Задания состоят из последовательности шагов. Шаг — это либо команда оболочки (shell command), либо экшен (action). Все шаги задания выполняются последовательно на раннере, связанном с заданием. По умолчанию в случае сбоя шага все следующие шаги задания пропускаются.

  • Экшен / Actions

    Экшен — многократно используемый блок кода, который может служить шагом задания. Каждый экшен может принимать на вход параметры и создавать любые значения, которые затем можно использовать в других экшенах. Разработчики могут создавать собственные экшены или использовать опубликованные сообществом GitHub. Общих экшенов около тысячи, все они доступны на GitHub Marketplace.

Рекомендуемые программы

Завершено

0 / 4