GitHub Actions — система автоматизации рабочих процессов, интегрированная в GitHub. Она позволяет автоматизировать задачи, от проверки кода до деплоя на сервер. GitHub Actions часто используется в контексте CI/CD (Continuous Integration/Continuous Delivery/Deployment — непрерывная интеграция/непрерывная доставка/непрерывное развёртывание). CI подразумевает поэтапную разработку, где каждый коммит проверяется. CD — это тестирование и развёртывание на серверах.
Что делает GitHub Actions?
GitHub Actions автоматизирует процессы, такие как запуск линтера (проверка стиля кода), тестов и деплоя, без необходимости ручного выполнения этих задач. Автоматическая сборка и тестирование проекта происходят без вашего участия.
Как это работает?
Для работы GitHub Actions необходимо определить пайплайны (workflows). Пайплайн — это последовательность действий, запускаемых в ответ на событие. Описание workflow находится в файле .yml, расположенном в папке .github/workflows/ проекта. После загрузки в репозиторий workflow запускается. Его выполнение отслеживается во вкладке Actions в меню репозитория.
Практический пример: автоматическое тестирование и деплой API
Рассмотрим пример автоматического тестирования и деплоя API на тестовую версию. Конфигурация описывается в файле YAML.
Структура YAML-файла
YAML-файл содержит следующие ключевые секции:
- name: Имя workflow, отображаемое в интерфейсе GitHub.
- on: Триггеры (события), запускающие workflow. Например, push в определённую ветку (branches: [dev]). Возможны другие триггеры: коммит, пулл-реквест, время. Можно указать несколько триггеров и веток. Без указания веток будет выбрана главная.
- jobs: Описание действий workflow (джобы). Может быть одна или несколько джоб, независимых или зависимых друг от друга. Каждая джоба имеет имя (name) и указывает операционную систему (runs-on). GitHub создаёт виртуальную машину (раннер) с указанной ОС. Можно использовать самохостеные раннеры (self-hosted runner).
- steps: Шаги джобы. Каждый шаг имеет имя и описание действий:
- uses: Указывает сторонние экшены (готовые workflows). Примеры: checkout (доступ к репозиторию), установка Node.js. Дополнительные настройки — в секции with.
- run: Команды, выполняемые в терминале. Например, npm ci (установка зависимостей), npm test (запуск тестов).
- needs: Зависимость одной джобы от другой.
Пример YAML-файла с двумя джобами (test и deploy):
name: Test and Deploy API
on:
push:
branches:
- dev
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm ci
- run: npm test
deploy:
runs-on: ubuntu-latest
needs: test
steps:
- uses: some-deploy-action #Пример стороннего экшена
with:
FTP_HOST: ${{ secrets.FTP_HOST }}
# ... другие секреты ...
В этом примере джоба deploy запускается после успешного завершения джобы test. Секреты (secrets) хранятся в настройках репозитория и не видны в коде.
Переменные и стратегии
GitHub Actions поддерживает переменные. Секция strategy с блоком matrix позволяет тестировать приложение на нескольких ОС и с разными версиями инструментов:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node: [14, 16]
Переменные указываются с помощью $ {{ variable }}.
Секреты
Секреты — конфиденциальная информация (пароли, токены), хранящаяся в настройках репозитория (Secrets and variables). Доступны только администраторам.
GitHub Marketplace
GitHub Marketplace — площадка для поиска и использования сторонних workflows. Примеры: actions/checkout, экшены для деплоя на GitHub Pages, сборки Docker-контейнеров и установки зависимостей.
GitHub Actions — мощный инструмент для автоматизации рабочих процессов, упрощающий разработку и деплой. Он позволяет использовать собственные и сторонние workflows.