EMZETT.
Войти

GitHub Actions: рабочие процессы для тестов и деплоя

Коротко: GitHub Actions автоматически запускает рабочие процессы при событиях вроде push или pull request: тесты, линтинг, сборки и деплои, описанные в YAML-файлах в репозитории.

Подробнее: С GitHub Actions вы настраиваете CI/CD прямо рядом с кодом. Рабочий процесс (workflow) (файл в .github/workflows/) запускается событиями и выполняет задания (jobs) на раннерах (виртуальных машинах, размещённых GitHub или собственных). Каждое задание состоит из шагов (steps).

Подробности

Пример

name: CI
on:
  push:
    branches: [main]
  pull_request:
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - run: npm run lint
      - run: npm test

uses: подключает готовые действия (actions) (маркетплейс), run: выполняет команды. Результат появляется в pull request в виде зелёной галочки или красного крестика.

Важные понятия

  • Триггеры: push, pull_request, schedule (cron), workflow_dispatch (вручную), release.
  • Матрица: тесты на нескольких версиях/системах (strategy.matrix).
  • Кэширование и артефакты ускоряют и сохраняют результаты.
  • Секреты (${{ secrets.NAME }}) для учётных данных, переменные и окружения с подтверждением (одобрение для production).
  • Зависимости между заданиями (needs:), условия (if:).
  • Повторно используемые рабочие процессы и составные действия.

Безопасность

  • Минимальные разрешения: задайте permissions: в рабочем процессе (contents: read), не наделяйте токен избыточными правами.
  • Фиксируйте действия (на SHA коммита вместо подвижного тега), используйте надёжные источники: атаки на цепочку поставок реальны.
  • Никогда не выводите секреты в журналы; для pull request из форков рабочие процессы по умолчанию не получают секретов (и правильно).
  • pull_request_target — только с большой осторожностью.
  • Dependabot может поддерживать версии действий актуальными.
  • Не подставляйте входные данные (имена веток, заголовки) непроверенными в команды оболочки (инъекция).

Стоимость и ограничения

Для публичных репозиториев минуты бесплатны, для приватных есть квота, затем плата; проблема с оплатой или исчерпанный лимит могут привести к тому, что задания вообще не запустятся. Планируйте быстрые рабочие процессы, используйте кэши, ограничивайте матрицу и время выполнения и держите наготове воспроизводимые локально команды (npm test), чтобы CI выполнял только то же, что и вы локально. Альтернативы: GitLab CI, CircleCI, Jenkins, Forgejo/Gitea Actions.

См. также: Конвейер CI/CD, GitHub, Git hooks, Цепочка поставок ПО