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

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

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

Сообщение bunmaker »

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

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

Сообщение Omoto »

Для 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 😄 🤔
Аватара пользователя
valru
Сообщения: 63
Зарегистрирован: 11 май 2026, 05:24

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

Сообщение valru »

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 😄 🤔
Аватара пользователя
lorenzinoarq
Сообщения: 65
Зарегистрирован: 11 май 2026, 00:03

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

Сообщение lorenzinoarq »

✔ Лучший ответ — выбран автором и совпадает с авто-подбором
Развёрнутое решение по оптимизации времени 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 и запускать параллельно — суммарное время падает кратно числу параллельных воркеров.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
sneeke
Сообщения: 29
Зарегистрирован: 11 май 2026, 03:15

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

Сообщение sneeke »

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

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

Сообщение timur12 »

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

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

Сообщение guardia »

Кстати, если часто меняются только тесты или документация, можно добавить paths filter: on: push: paths: - 'src/**' - 'package*.json' и не запускать тяжёлый пайплайн на правки в README или .md файлах.
👍2 ❤️ 🔥 😄 🤔
Аватара пользователя
wasonga2
Сообщения: 6
Зарегистрирован: 16 май 2026, 02:51

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

Сообщение wasonga2 »

а вы npm ci используете или npm install? пять минут на установку это подозрительно даже без кэша. ci с прогретым ~/.npm у нас на проекте с 1800 пакетами укладывается в 40-50 секунд. если в логах до сих пор npm install, начните с этого, заодно lock-файл честнее соблюдается.
👍 ❤️ 🔥1 😄 🤔2
Аватара пользователя
puto
Сообщения: 40
Зарегистрирован: 11 май 2026, 06:02

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

Сообщение puto »

@valru, type=gha рабочий, но есть грабли: лимит кэша 10 ГБ на репозиторий. mode=max на жирном мультистейдже забивает его за несколько дней, гитхаб начинает вытеснять старые записи и hit rate проседает в ноль. Мы плюнули и перешли на type=registry с отдельным тегом buildcache в том же ghcr, живет заметно стабильнее.
👍2 ❤️2 🔥1 😄 🤔
Аватара пользователя
togashi
Сообщения: 50
Зарегистрирован: 10 май 2026, 23:57

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

Сообщение togashi »

@timur12, цифры подозрительно ровно бьются, 6+4+3+1 ровно 14 и итог ровно 4. в жизни порядок слоев и buildx кэш экономят наполовину одно и то же, эффекты пересекаются. не то чтобы не верю, но выглядит как слайд для менеджмента, лол
👍 ❤️ 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK
Похожие запросы: docker compose как пользоватьсякак написать dockerfileкак уменьшить размер docker образачто такое docker hub и как им пользоватьсякак собрать docker образ из dockerfileлучшие практики написания dockerfile

Вернуться в «DevOps и CI/CD»

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

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