CI: автоматические тесты
Continuous Integration (CI) — практика автоматического запуска тестов при каждом пуше кода, чтобы сломанный код не попал в основную ветку.
Зачем нужно
Автоматические тесты в CI дают немедленную обратную связь: разработчик узнаёт о сломанном коде до code review, а не после деплоя. Это особенно важно в командной работе — CI блокирует merge, если тесты не прошли, и гарантирует, что main-ветка всегда в рабочем состоянии.
Где используется
- Запуск unit- и integration-тестов при каждом Pull Request в GitHub
- Проверка линтинга и типов (ESLint, TypeScript) в пайплайне перед слиянием
- E2E-тесты (Playwright, Cypress) при деплое на staging-среду
- Тесты для monorepo: запускаются только тесты изменённых пакетов
Основной контент
Типичный CI-пайплайн для Node.js
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [20.x, 22.x] # тестируем на двух версиях Node
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run linter
run: npm run lint
- name: Run tests
run: npm test -- --coverage
- name: Upload coverage
uses: codecov/codecov-action@v4
Параллельные джобы
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm run lint
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npm test
typecheck:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci && npx tsc --noEmit
Кэширование зависимостей
- name: Cache node_modules
uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json()') }}
restore-keys: |
${{ runner.os }}-node-
Статус-бейджи

Частые ошибки
npm installвместоnpm ciв пайплайне —npm ciвоспроизводим и быстрее- Тесты, зависящие от локальной БД: в CI нужен сервис (service containers) или моки
- Отсутствие кэша зависимостей — каждый запуск скачивает
node_modulesзаново (медленно) - Игнорирование провалившегося пайплайна ради скорости: CI теряет смысл
Связанные темы
- _MOC DevOps
- Автоматический деплой
- DevOps -- что такое и зачем
- DevOps -- что такое и зачем
- Линтинг и форматирование в CI