GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI

Рейтинг: 23.1% · 5 голосов
Docker, Kubernetes, Helm, Terraform, Ansible, GitLab CI, GitHub Actions: автоматизация деплоя, инфраструктура как код, мониторинг и observability.
Ответить
Аватара пользователя
grigory2102
Сообщения: 17
Зарегистрирован: Пн май 11, 2026 1:50 pm

GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI

Сообщение grigory2102 »

CI-пайплайн на GitHub Actions занимает 15 минут: 5 из них уходит на npm install и ещё 4 на docker build. Каждый пуш — полная пересборка с нуля. Читал про кэширование, но не очень понимаю как правильно настроить кэш для npm и для Docker-слоёв. Кто настраивал — поделитесь рабочим конфигом?
👍3 ❤️ 🔥1 😄1 🤔1
✔ Лучший ответ выбран автором и совпадает с автоматическим подбором — grigory_go73
Развёрнутое решение по оптимизации времени CI. Для npm: помимо кэша install, стоит разделить install и build на отдельные джобы если у вас monorepo, и использовать nx affected или turborepo чтобы собирать только изменившиеся пакеты. Экономия может быть колоссальной. Для Docker: самое важное — правильный порядок слоёв в Dockerfile. Сначала копируй package.json и package-lock.json, делай npm instal…
Перейти к ответу →
Аватара пользователя
filipp3968
Сообщения: 3
Зарегистрирован: Вт май 19, 2026 12:38 pm

Re: GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI

Сообщение filipp3968 »

Для npm проще всего использовать actions/setup-node с встроенным кэшем: - uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm'. Это автоматически кэширует ~/.npm по хэшу package-lock.json. Если cache hit — npm install занимает секунды вместо минут. Для yarn и pnpm аналогично, просто меняй значение cache.
👍1 ❤️ 🔥2 😄 🤔
Аватара пользователя
nodeai6938
Сообщения: 1
Зарегистрирован: Вс май 24, 2026 12:31 am

Re: GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI

Сообщение nodeai6938 »

Docker-слои кэшируются через buildx и cache-to/cache-from. Вот рабочий кусок: - uses: docker/setup-buildx-action@v3 - uses: docker/build-push-action@v5 with: context: . push: true tags: myimage:latest cache-from: type=gha cache-to: type=gha,mode=max. Ключевое — type=gha использует GitHub Actions Cache API, это работает из коробки без внешнего registry. mode=max кэширует все промежуточные слои.
👍1 ❤️1 🔥3 😄 🤔
Аватара пользователя
grigory_go73
Сообщения: 22
Зарегистрирован: Пн май 11, 2026 3:02 am

Re: GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI

Сообщение grigory_go73 »

✔ Лучший ответ — выбран автором и совпадает с авто-подбором
Развёрнутое решение по оптимизации времени CI. Для npm: помимо кэша install, стоит разделить install и build на отдельные джобы если у вас monorepo, и использовать nx affected или turborepo чтобы собирать только изменившиеся пакеты. Экономия может быть колоссальной. Для Docker: самое важное — правильный порядок слоёв в Dockerfile. Сначала копируй package.json и package-lock.json, делай npm install, и только потом COPY . . с исходниками. Тогда слой с зависимостями будет закэширован и пересобираться только при изменении package.json. Пример: COPY package*.json ./ ; RUN npm ci --only=production ; COPY src/ ./src/. Дополнительно: используй multi-stage build чтобы финальный образ не тащил devDependencies и build-tooling. Это уменьшает размер образа в 2-5 раз и ускоряет push. Ещё трюк: можно вынести тесты в отдельный job с matrix strategy и запускать параллельно — суммарное время падает кратно числу параллельных воркеров.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
valera_vector
Сообщения: 32
Зарегистрирован: Пн май 11, 2026 8:23 am

Re: GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI

Сообщение valera_vector »

Не забывай про cache key стратегию. Я использую такой подход: key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node-. restore-keys позволяет использовать частично устаревший кэш если точного совпадения нет, вместо полного cache miss.
👍1 ❤️ 🔥1 😄1 🤔
Аватара пользователя
mark_ml
Сообщения: 36
Зарегистрирован: Вт май 12, 2026 12:33 am

Re: GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI

Сообщение mark_ml »

После всех оптимизаций у нас CI упал с 18 минут до 4. Ключевые вещи которые дали наибольший выигрыш по порядку: правильный порядок слоёв Dockerfile (+6 мин), кэш npm (+4 мин), параллельные тесты (+3 мин), buildx кэш (+1 мин).
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
dnscache8196
Сообщения: 32
Зарегистрирован: Вс май 10, 2026 10:26 pm

Re: GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI

Сообщение dnscache8196 »

Кстати, если часто меняются только тесты или документация, можно добавить paths filter: on: push: paths: - 'src/**' - 'package*.json' и не запускать тяжёлый пайплайн на правки в README или .md файлах.
👍2 ❤️ 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость