CI/CD для фронтенда

↑ 6.2 Сборка и инфраструктура: Vite, monorepo, CI∕CD · ← Предыдущая · → Следующая

Желательно~4 мин чтенияУровень: middle

Зачем это на собесе

Как выглядит пайплайн фронтенда: проверки, сборка, превью-окружения и деплой.

Объяснение

Этапы пайплайна:

СтадияДействия
Установкаnpm ci с кэшем (~/.npm/pnpm store), Node из .nvmrc
Проверкиeslint, prettier --check, stylelint, vue-tsc --noEmit
Тестыunit/component (Vitest) + coverage
Сборкаvite build (артефакт dist)
Безопасностьnpm audit, SAST, secret scanning, проверка лицензий
E2EPlaywright на превью-окружении/против контейнера
Качество производительностиLighthouse CI, size-limit (бюджет размера)
Артефактобраз Docker (nginx + dist) или статические файлы в бакет
Deploypreview на MR, stage (авто), prod (вручную/по тегу)
Пост-проверкиsmoke-тест, мониторинг ошибок (Sentry release), откат
# GitHub Actions
name: ci
on: { pull_request: {}, push: { branches: [main] } }
jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: pnpm/action-setup@v4
      - uses: actions/setup-node@v4
        with: { node-version-file: .nvmrc, cache: pnpm }
      - run: pnpm install --frozen-lockfile
      - run: pnpm lint && pnpm typecheck && pnpm test --coverage
      - run: pnpm build
      - uses: actions/upload-artifact@v4
        with: { name: dist, path: dist }
  e2e:
    needs: verify
    steps: [ ... playwright install --with-deps, pnpm e2e ... ]
  deploy:
    needs: [verify, e2e]
    if: github.ref == 'refs/heads/main'
    environment: production          # ручное подтверждение
    steps: [ ... docker build/push, deploy ... ]

Практики:

  • Быстрый фидбек: параллельные джобы, кэш, affected-подход в monorepo.
  • Превью-окружение на каждый MR (Netlify/Vercel/Cloudflare Pages или свой стенд) для ревью дизайна и e2e.
  • Один артефакт на все окружения + runtime-конфигурация.
  • Версия/коммит в приложении (__APP_VERSION__), source maps → Sentry (не публично).
  • Защищённые переменные и секреты CI; принцип наименьших прав токенов.
  • Кэш зависимостей и сборки, ограничение параллельных прогонов (concurrency cancel).
  • Пороги качества как блокирующие проверки (coverage, размер бандла, a11y).

Нюансы и подводные камни

  • Нестабильные e2e-тесты подрывают доверие к CI.
  • Секреты в логах/артефактах.
  • Разные версии Node локально и в CI — фиксируйте .nvmrc/engines.
  • Слишком долгий пайплайн — разработчики обходят его.
  • Автодеплой в prod без защиты и метрик отката.

Практика

  1. Соберите пайплайн: lint → typecheck → test → build → artifact.
  2. Добавьте превью-окружения для MR.
  3. Настройте Lighthouse CI и size-limit как блокирующие проверки.

Вопросы с ответами

Связанные темы