GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI
Рейтинг: 23.1% · 5 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- grigory2102
- Сообщения: 17
- Зарегистрирован: Пн май 11, 2026 1:50 pm
GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI
CI-пайплайн на GitHub Actions занимает 15 минут: 5 из них уходит на npm install и ещё 4 на docker build. Каждый пуш — полная пересборка с нуля. Читал про кэширование, но не очень понимаю как правильно настроить кэш для npm и для Docker-слоёв. Кто настраивал — поделитесь рабочим конфигом?
✔ Лучший ответ выбран автором и совпадает с автоматическим подбором — 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
Для 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.
- nodeai6938
- Сообщения: 1
- Зарегистрирован: Вс май 24, 2026 12:31 am
Re: GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI
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 кэширует все промежуточные слои.
- grigory_go73
- Сообщения: 22
- Зарегистрирован: Пн май 11, 2026 3:02 am
Re: GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI
✔ Лучший ответ — выбран автором и совпадает с авто-подбором
Развёрнутое решение по оптимизации времени 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
Не забывай про cache key стратегию. Я использую такой подход: key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node-. restore-keys позволяет использовать частично устаревший кэш если точного совпадения нет, вместо полного cache miss.
Re: GitHub Actions как кэшировать зависимости npm и Docker слои для ускорения CI
После всех оптимизаций у нас CI упал с 18 минут до 4. Ключевые вещи которые дали наибольший выигрыш по порядку: правильный порядок слоёв Dockerfile (+6 мин), кэш npm (+4 мин), параллельные тесты (+3 мин), buildx кэш (+1 мин).
- dnscache8196
- Сообщения: 32
- Зарегистрирован: Вс май 10, 2026 10:26 pm
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- GitHub Actions съедает бюджет, селф-хостед раннеры — спасение или геморрой?
7 ответов · 704 просмотров
-
- Решил кэшировать прямо в Postgres вместо Redis, чтобы не плодить зависимости. Норм идея?
3 ответов · 242 просмотров
-
-
-
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость