GitHub Actions для начинающих: первый CI-пайплайн
Практика3 минРедакция Innovialabs
Коротко
GitHub Actions запускает YAML-файл из .github/workflows при событиях в репозитории; первый CI-пайплайн — это один job, который скачивает код, ставит зависимости, запускает линтер, тесты и сборку на каждый push и pull request.
Что такое GitHub Actions
GitHub Actions — встроенная в GitHub система автоматизации. Вы описываете в YAML-файле, что делать при событии в репозитории, а GitHub запускает это на своей виртуальной машине. Самое частое применение — CI (continuous integration): каждое изменение автоматически проверяется линтером и тестами, и сломанный код не попадает в основную ветку незамеченным.
Основные понятия
| Понятие | Что это |
|---|---|
| Workflow | Файл .yml в папке .github/workflows. В репозитории их может быть несколько |
Trigger (on) | Событие, которое запускает workflow: push, pull request, расписание, ручной запуск |
| Job | Набор шагов, выполняемый на одной машине. Jobs по умолчанию идут параллельно |
| Step | Отдельная команда (run) или готовое действие (uses) |
| Runner | Машина, на которой выполняется job, например ubuntu-latest |
| Action | Переиспользуемый шаг из Marketplace, например actions/checkout |
Первый пайплайн шаг за шагом
Пример для проекта на Node.js. Создайте файл .github/workflows/ci.yml:
name: CI
on:
push:
branches: [main]
pull_request:
jobs:
check:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint
- name: Test
run: npm test
- name: Build
run: npm run build
Что здесь происходит:
- on — пайплайн запускается при push в
mainи на каждый pull request. - actions/checkout — скачивает код репозитория на runner. Без этого шага машина пустая.
- actions/setup-node — ставит Node.js и кеширует npm-пакеты, чтобы следующие запуски шли быстрее.
- npm ci — чистая установка строго по
package-lock.json. Для CI это лучше, чемnpm install. - Линтер, тесты и сборка. Если любой шаг завершится с ненулевым кодом, job упадёт, и GitHub покажет красный крестик у коммита.
Сделайте commit и push — запуск появится во вкладке Actions репозитория.
Полезные улучшения
Отмена устаревших запусков. Если вы сделали несколько push подряд, проверять старые коммиты незачем:
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
Матрица версий. Проверка на нескольких версиях Node.js одной конфигурацией:
strategy:
matrix:
node: [18, 20, 22]
и node-version: ${{ matrix.node }} в шаге setup-node.
Зависимости между jobs. Ключ needs: check заставит, например, job деплоя ждать успешной проверки.
Защита ветки. В настройках репозитория включите правило для main, которое требует успешного CI перед слиянием pull request. Именно это превращает CI из «уведомлений» в реальную защиту.
Как выбирать actions из Marketplace
- Предпочитайте официальные действия (
actions/*) и действия от авторов инструментов. - Фиксируйте версию: минимум мажорную (
@v4), а для максимальной безопасности — полный SHA коммита. - Смотрите, что действие делает с секретами: стороннему коду не стоит передавать токены без необходимости.
Частые ошибки
- Файл лежит не в
.github/workflowsили имеет ошибку в отступах YAML. - Забыт
actions/checkout, и команды не находят файлы проекта. npm installвместоnpm ci— сборка может отличаться от локальной.- Секреты выводятся в лог через
echo. Храните их в Settings → Secrets и обращайтесь как${{ secrets.NAME }}.