Перейти к содержанию
Innovialabs

GitHub Actions для начинающих: первый CI-пайплайн

Практика3 мин

Коротко

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

Что здесь происходит:

  1. on — пайплайн запускается при push в main и на каждый pull request.
  2. actions/checkout — скачивает код репозитория на runner. Без этого шага машина пустая.
  3. actions/setup-node — ставит Node.js и кеширует npm-пакеты, чтобы следующие запуски шли быстрее.
  4. npm ci — чистая установка строго по package-lock.json. Для CI это лучше, чем npm install.
  5. Линтер, тесты и сборка. Если любой шаг завершится с ненулевым кодом, 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 }}.

Частые вопросы

Для публичных репозиториев стандартные runners бесплатны. Для приватных действует лимит минут в зависимости от тарифа, сверх него — оплата. Актуальные условия смотрите в документации GitHub.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.