GitHub Actions — бесплатная для публичных репозиториев система непрерывной интеграции. Хекслет использует Actions во всех своих закрытых и открытых проектах (пример). С помощью Github Actions можно делать много полезного:
- Запустить проверку кода линтером и тестами
- Выполнить деплой проекта
- Опубликовать новую версию пакета
- Подключить оповещения в мессенджер о событиях в репозитории (новые issue, PR)
- и многое другое
В этом уроке мы разберемся в основных концепциях системы, а затем рассмотрим пример настройки, чтобы быстро начать работу с 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. Разберем их по порядку.
Воркфлоу / Workflows
Каждый репозиторий на GitHub может содержать один или несколько воркфлоу. Каждый воркфлоу определяется в отдельном файле конфигурации в каталоге репозитория .github/workflows. Несколько воркфлоу могут выполняться параллельно.
События / Events
Воркфлоу может запускаться одним или несколькими событиями. Это могут быть внутренние события GitHub (например, пуш, релиз или пул-реквест), запланированные события (запускаются в определенное время — например, cron) или произвольные внешние события (запускаются вызовом Webhook API GitHub).
Задания / Jobs
Воркфлоу состоит из одного или нескольких заданий. Задание содержит набор команд, которые запускаются вместе с рабочим процессом. По умолчанию при запуске воркфлоу все его задания выполняются параллельно, однако между ними можно определить зависимость, чтобы они выполнялись последовательно.
Раннеры / Runners
Каждое задание выполняется на определенном раннере — временном сервере на GitHub с выбранной операционной системой (Linux, macOS или Windows). Также существуют автономные раннеры, которые позволяют создать свое окружение для выполнения экшена.
Шаги / Steps
Задания состоят из последовательности шагов. Шаг — это либо команда оболочки (shell command), либо экшен (action). Все шаги задания выполняются последовательно на раннере, связанном с заданием. По умолчанию в случае сбоя шага все следующие шаги задания пропускаются.
Экшен / Actions
Экшен — многократно используемый блок кода, который может служить шагом задания. Каждый экшен может принимать на вход параметры и создавать любые значения, которые затем можно использовать в других экшенах. Разработчики могут создавать собственные экшены или использовать опубликованные сообществом GitHub. Общих экшенов около тысячи, все они доступны на GitHub Marketplace.
Самостоятельная работа
По традиции создадим собственный Hello, World! из воркфлоу.
- Создайте в репозитории Makefile и добавьте в него команду
say-hello
, которая печатает на экран строкуHello, World!
. Пример вызова:
make say-hello
Hello, World!
- Создайте воркфлоу, в котором запускается созданная команда. Для этого скопируйте воркфлоу из урока и замените в нем команду
ls -la
наmake say-hello
- Запушьте все изменения на гитхаб и проверьте на вкладке Actions репозитория на гитхабе, что воркфлоу выполнился успешно
- Добавьте в README.md бейдж со ссылкой на Github Actions. Бейдж можно найти через меню, нажав на три точки в правом верхнем углу на странице с воркфлоу
В результате, у вас должен получиться рабочий воркфлоу, а в ридми проекта зеленый бейдж, сообщающий о статусе последнего выполнения.
Дополнительные материалы
- Документация GitHub Actions
- Что такое Makefile и как начать его использовать
- Добавление бэйджа Github Actions
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.