PurpleSchool — курсы программирования онлайн
  • Пути
    • Frontend React разработчик
    • Frontend Vue разработчик
    • Backend разработчик Node.js
    • Fullstack разработчик React / Node.js
    • Mobile разработчик React Native
    • Backend разработчик Golang
    • Devops инженер
    • Backend разработчик Python
  • Подписка
  • AI для кодаНовое
  • О нас
    • Отзывы
    • Реферальная программа
    • О компании
    • Контакты
  • Иконка открытия меню
    • Сообщество
    • PurpleПлюс
    • AI Собеседование
    • AI тренажёр
    • Проекты
PurpleSchool — платформа бесплатных roadmap и курсов для разработчиков
ютуб иконка
Telegram иконка
VK иконка
VK иконка
Курсы
ГлавнаяКаталог курсовFrontendBackendFullstack
Практика
КарьераПроектыPurpleПлюсPurpleMax
Материалы
БлогБаза знаний
Документы
Договор офертаПолитика конфиденциальностиПроверка сертификатаМиграция курсовРеферальная программа
Реквизиты
ИП Ларичев Антон АндреевичИНН 773373765379contact@purpleschool.ru

PurpleSchool © 2020 -2026 Все права защищены

  • Курсы
    • FrontendИконка стрелки
    • AI разработкаИконка стрелки
    • BackendИконка стрелки
    • DevOpsИконка стрелки
    • MobileИконка стрелки
    • ТестированиеИконка стрелки
    • Soft-skillsИконка стрелки
    • ДизайнИконка стрелки
    Иконка слояПерейти в каталог курсов
  • Бесплатно
    • Курсы
    • JavaScript Основы разработкиPython Основы PythonCSS CSS FlexboxКарта развитияВопросы для собеседований
    • База знанийИконка стрелки
    • Новостные рассылкиИконка стрелки
  • PurpleSchool — курсы программирования онлайн
    • Подписка
    • AI для кодаНовое
    • Сообщество
    Главная
    Сообщество
    CI/CD пайплайн в GitHub Actions для Next.js: полный гайд

    CI/CD пайплайн в GitHub Actions для Next.js: полный гайд

    Аватар автора CI/CD пайплайн в GitHub Actions для Next.js: полный гайд

    Антон Ларичев

    Иконка календаря18 июня 2026
    GitHub ActionsCI/CDNext.jsDevOpsАвтоматизацияmiddleИконка уровня middle
    Картинка поста CI/CD пайплайн в GitHub Actions для Next.js: полный гайд

    Введение

    CI/CD пайплайн в GitHub Actions для Next.js — это автоматизированный процесс, который превращает каждый push в репозиторий в проверенную и развёрнутую версию приложения. Вместо ручного запуска тестов, сборки и деплоя вы описываете весь цикл в YAML-файле, а GitHub берёт на себя выполнение.

    В этой статье разберём, как настроить полноценный пайплайн: от линтинга и тестов до деплоя на Vercel или собственный сервер. Покажем, как кэшировать зависимости, использовать матричные сборки и безопасно работать с секретами.

    Структура workflow-файла

    GitHub Actions ищет workflow-файлы в директории .github/workflows/. Каждый файл описывает один или несколько jobs, которые запускаются по триггеру — push, pull_request или по расписанию.

    # .github/workflows/ci.yml
    name: CI Pipeline
    
    on:
      push:
        branches: [main, develop]
      pull_request:
        branches: [main]
    
    jobs:
      lint-and-test:
        runs-on: ubuntu-latest
        steps:
          # Получаем код из репозитория
          - uses: actions/checkout@v4
    
          # Устанавливаем Node.js нужной версии
          - name: Setup Node.js
            uses: actions/setup-node@v4
            with:
              node-version: '20'
              cache: 'npm'
    
          # Устанавливаем зависимости
          - name: Install dependencies
            run: npm ci
    
          # Запускаем линтер
          - name: Run linter
            run: npm run lint
    
          # Запускаем тесты
          - name: Run tests
            run: npm test -- --ci --coverage
    

    Обратите внимание на npm ci вместо npm install — эта команда работает строго по package-lock.json и быстрее в CI-окружении.

    Кэширование зависимостей и сборки

    Next.js хранит результаты сборки в .next/cache. Если кэшировать эту директорию между запусками, инкрементальные сборки ускоряются в разы.

          - name: Cache Next.js build
            uses: actions/cache@v4
            with:
              # Кэшируем node_modules и кэш Next.js
              path: |
                ${{ github.workspace }}/.next/cache
              # Ключ зависит от lock-файла и исходников
              key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**/*.js', '**/*.jsx', '**/*.ts', '**/*.tsx') }}
              restore-keys: |
                ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
    
          - name: Build application
            run: npm run build
    

    Ключ кэша составной: при изменении lock-файла или исходников кэш инвалидируется, но похожие сборки всё равно подтягивают данные через restore-keys.

    Матричные сборки для нескольких версий Node

    Если библиотека или приложение должны работать на нескольких версиях Node.js, используйте strategy.matrix. GitHub запустит параллельные job для каждой комбинации.

    jobs:
      test:
        runs-on: ubuntu-latest
        strategy:
          # Не отменять остальные job при падении одной
          fail-fast: false
          matrix:
            node-version: [18, 20, 22]
        steps:
          - uses: actions/checkout@v4
          - uses: actions/setup-node@v4
            with:
              node-version: ${{ matrix.node-version }}
              cache: 'npm'
          - run: npm ci
          - run: npm test
    

    Деплой на Vercel

    Для автоматического деплоя на Vercel понадобится токен из настроек аккаунта и идентификаторы проекта. Они хранятся в Secrets репозитория (Settings → Secrets and variables → Actions).

      deploy:
        needs: lint-and-test
        runs-on: ubuntu-latest
        # Деплоим только из main ветки
        if: github.ref == 'refs/heads/main'
        steps:
          - uses: actions/checkout@v4
    
          - name: Install Vercel CLI
            run: npm install --global vercel@latest
    
          - name: Pull Vercel environment
            run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}
    
          - name: Build project artifacts
            run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}
    
          - name: Deploy to Vercel
            run: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }}
    

    Деплой на собственный сервер через SSH

    Если используется свой VPS, удобно собирать Docker-образ и пушить его в registry, а затем подключаться по SSH и перезапускать контейнер.

      deploy-vps:
        needs: lint-and-test
        runs-on: ubuntu-latest
        if: github.ref == 'refs/heads/main'
        steps:
          - uses: actions/checkout@v4
    
          - name: Deploy via SSH
            uses: appleboy/ssh-action@v1
            with:
              host: ${{ secrets.SSH_HOST }}
              username: ${{ secrets.SSH_USER }}
              key: ${{ secrets.SSH_PRIVATE_KEY }}
              script: |
                cd /var/www/app
                git pull origin main
                npm ci --omit=dev
                npm run build
                pm2 reload nextjs-app
    

    Работа с переменными окружения

    Next.js различает переменные на этапах сборки и рантайма. Префикс NEXT_PUBLIC_ делает значение доступным в браузере и вшивается в бандл во время next build. Это значит, что секреты с таким префиксом утекут в публичный код.

          - name: Build with env
            env:
              # Эта переменная попадёт в клиентский бандл — только публичные данные
              NEXT_PUBLIC_API_URL: ${{ vars.PUBLIC_API_URL }}
              # А эта останется серверной
              DATABASE_URL: ${{ secrets.DATABASE_URL }}
            run: npm run build
    

    Частые ошибки

    Использование npm install вместо npm ci. Первая команда может обновить зависимости и привести к расхождению между локальной и CI-сборкой. В пайплайне всегда используйте npm ci.

    Отсутствие кэша Next.js. Без кэширования .next/cache сборка каждый раз идёт с нуля — это лишние минуты на каждом запуске. Особенно заметно на проектах с большим числом страниц и тяжёлой оптимизацией изображений.

    Секреты в логах. Никогда не выводите содержимое переменных через echo. GitHub маскирует значения из secrets, но переменные из vars или собранные на лету — нет.

    Деплой без проверок. Job деплоя должен зависеть от job тестов через needs. Иначе при упавших тестах вы всё равно выкатите сломанную версию в продакшн.

    Игнорирование concurrency. Если на main одновременно прилетает несколько коммитов, могут запуститься параллельные деплои. Добавьте группу concurrency, чтобы новый запуск отменял предыдущий.

    concurrency:
      group: deploy-${{ github.ref }}
      cancel-in-progress: true
    

    Жёсткая привязка к версии Node без проверки. Если в package.json указана версия Node через engines, продублируйте её в workflow. Иначе разойдётся локальное окружение и CI.

    Заключение

    GitHub Actions покрывает все этапы доставки Next.js-приложения: от линтинга и тестов до production-деплоя. Минимальный рабочий пайплайн умещается в 30 строк YAML, но грамотное кэширование, матричные сборки и разделение секретов превращают его в надёжный инструмент команды.

    Начните с простого workflow на lint и build, затем добавьте тесты, кэш и автоматический деплой. Каждый шаг должен быть атомарным и идемпотентным — тогда пайплайн станет вашим главным союзником, а не источником ночных инцидентов.

    Иконка глаза771

    Комментарии

    0

    Постройте личный план изучения Next.js 15 - с нуля, React TypeScript, Hooks, SSR и CSS Grid до уровня Middle — бесплатно!

    Next.js 15 - с нуля, React TypeScript, Hooks, SSR и CSS Grid — часть карты развития Frontend

    • step100+ шагов развития
    • lessons30 бесплатных лекций
    • lessons300 бонусных рублей на счет

    Бесплатные лекции

    Лучшие курсы по теме

    изображение курса

    Vue 3 и Pinia

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.8
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Nuxt

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга5.0
    3 999 ₽ 6 990 ₽
    Подробнее
    изображение курса

    Feature-Sliced Design

    Антон Ларичев
    AI-тренажерыAI-тренажеры
    Практика в студииПрактика в студии
    Гарантия
    Бонусы
    иконка звёздочки рейтинга4.6
    3 999 ₽ 6 990 ₽
    Подробнее

    Похожие статьи

    Картинка поста Как настроить CI/CD пайплайн с нуля: полное руководство
    Иконка аватараАнтон
    Иконка календаря14 октября 2026
    CI/CDDevOpsGitHub Actions+ 2middleИконка уровня middle

    Как настроить CI/CD пайплайн с нуля: полное руководство

    CI/CD пайплайн с нуля: как собрать рабочий конвейер сборки, тестов и деплоя на примере GitHub Actions и Docker без лишней теории.

    Иконка чипа0
    Иконка глаза256
    Иконка комментариев0
    Картинка поста CLAUDE.md: как написать инструкции для Claude Code
    Иконка аватараАнтон
    Иконка календаря11 октября 2026
    AI-инструментыClaude CodeDevOps+ 1middleИконка уровня middle

    CLAUDE.md: как написать инструкции для Claude Code

    CLAUDE.md — это файл с инструкциями по проекту, который Claude Code читает в начале каждой сессии. Положите его в корень репозитория и опишите внутри, чем проект собирается, чем запускаются тесты и каких соглашений держаться в коде. После этого агент перестанет спрашивать одно и то же в каждом новом диалоге и предлагать решения, которые в вашей кодовой базе не приняты. Формат предельно простой: обычный Markdown, обязательных полей нет, заголовки любые. Дальше — где именно создавать файл и как Claude Code собирает инструкции сразу из нескольких мест, что писать внутрь, как подключать к файлу другие документы и чем CLAUDE.md отличается от AGENTS.md. Одна оговорка перед началом: Claude Code обновляется часто, набор команд и поддерживаемых файлов пополняется. Если какая-то деталь ниже ведёт себя у вас иначе, сверяйтесь с документацией той версии, которая стоит у вас.

    Иконка чипа0
    Иконка глаза849
    Иконка комментариев0
    Иконка аватараАнтон
    Иконка календаря10 октября 2026
    AI-инструментыClaude CodeDevOps+ 2middleИконка уровня middle

    Агенты в OpenCode: как создать своего агента

    Агент в OpenCode — это именованный профиль работы: своя модель, свой системный промпт и свой список разрешённых инструментов. Чтобы создать своего агента, нужно описать его отдельным markdown-файлом в папке `.opencode/agent/` внутри проекта (или в `~/.config/opencode/agent/`, если агент нужен во всех проектах) либо объявить его в блоке `agent` файла `opencode.json`. После этого агент появляется в списке доступных, и его можно вызвать прямо в сессии.

    Иконка чипа0
    Иконка глаза1 391
    Иконка комментариев0
    Иконка чипа0