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 testuses: подключает готовые действия (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, Цепочка поставок ПО