Вступить в клуб →
средняявопросDocker и сборка образов

Сборка в CI ставит зависимости заново при правке одного файла

Образ фронтенда собирается по такому Dockerfile:

FROM node:20-slim
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build

Раннер один и тот же, кэш слоёв между сборками сохраняется. Тем не менее любая правка, даже одной строки в README, приводит к полной установке зависимостей — сборка стабильно занимает 8 минут вместо ожидаемых 2.

Почему кэш не помогает?

  • `npm ci` по своей природе некэшируем: он каждый раз ставит зависимости с нуля по lock-файлу, и результат такой инструкции Docker в слой не сохраняет
  • Слой с `COPY . .` меняется при любом изменении в репозитории и инвалидирует все последующие слои, включая `npm ci`
  • Кэш слоёв в Docker живёт не дольше одного запуска сборки и между джобами не переиспользуется
  • Причина в базовом образе `node:20-slim`: slim-образы собираются без поддержки кэширования

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела