Сборка в 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-образы собираются без поддержки кэширования
