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, Ланцюжок постачання ПЗ