GitHub Actions: Автоматизация за 10 минут

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.

Что будем искать? Например,программа