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