Кэширование зависимостей для ускорения сборок
Ускорьте конвейеры CI, кэшируя зависимости и артефакты сборки с помощью действия actions/cache, ключей и ключей восстановления
«Кэширование зависимостей для ускорения сборок» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Цена повторной установки
Большая часть времени CI уходит на загрузку и установку одних и тех же зависимостей при каждом запуске. Кэширование сохраняет их между запусками, чтобы последующие сборки повторно использовали выполненную работу, часто значительно сокращая время конвейера.
Действие кэширования
GitHub предоставляет actions/cache. Вы указываете путь для кэширования и ключ, который идентифицирует запись кэша. При попадании в кэш путь восстанавливается, а при промахе сохраняется после завершения задания.
- uses: actions/cache@v4
with:
path: ~/.npm
key: npm-${{ hashFiles('package-lock.json') }}Проектирование хорошего ключа
Ключ должен меняться только тогда, когда должно измениться кэшируемое содержимое. Идеально вычислять хэш файла блокировок: новый файл блокировок означает новые зависимости, поэтому создаётся новая запись кэша.
key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}Ключи восстановления
restore-keys задаёт резервные префиксы. Если точный ключ не найден, действие восстанавливает самый свежий кэш, ключ которого начинается с одного из префиксов, обеспечивая частично прогретый запуск.
restore-keys: |
${{ runner.os }}-npm-Попадание в кэш и промах
При точном совпадении ключа происходит попадание в кэш, и путь восстанавливается. При промахе задание выполняется обычным образом, а в конце кэш сохраняется с основным ключом и будет готов к следующему запуску.
Встроенное кэширование при настройке
Действия настройки языковой среды уже поддерживают кэширование. Для Node действие setup-node с параметром cache: npm самостоятельно управляет кэшем зависимостей, поэтому отдельный шаг кэширования не нужен.
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npmЧто кэшировать
Кэшируйте каталоги загрузок менеджера пакетов, а не установленный каталог node_modules, если это возможно: кэши загрузок переносимы, а шаг установки всё равно проверяет целостность.
- Node:
~/.npm - Python: кэш pip
- Java:
~/.m2или кэши Gradle
Область действия и ограничения кэша
Область действия кэшей ограничена веткой (с резервным переходом к ветке по умолчанию), а для каждого репозитория установлен предельный размер. Неиспользуемые кэши со временем удаляются, поэтому проектируйте ключи так, чтобы они корректно обновлялись.
Как избежать устаревшего кэша
Если ключ никогда не меняется, Вы можете использовать устаревшие зависимости. Всегда связывайте ключ с хэшем файла блокировок, чтобы обновления автоматически делали кэш недействительным.
Матрица и ОС в ключах
При матричных сборках для разных ОС или версий включайте runner.os и версию в ключ, чтобы каждый вариант получал собственный корректный кэш, а не конфликтовал с другими.
key: ${{ runner.os }}-node20-${{ hashFiles('package-lock.json') }}Оценка результата
Сравните длительность заданий до и после кэширования и следите за индикатором попадания в кэш в журналах. Стабильно низкая доля попаданий указывает на ключ, который меняется слишком часто.
Проверка понимания
Проверьте, насколько хорошо Вы поняли кэширование зависимостей.
Итоги
Вы ускорили CI с помощью кэширования зависимостей: действия actions/cache с ключом, основанным на хэше файла блокировок, и резервным вариантом restore-keys, встроенное кэширование в действиях настройки, выбор объектов для кэширования, включение ОС и версии в матричные ключи, а также предотвращение устаревания кэша за счёт привязки ключа к файлу блокировок.
Часто задаваемые вопросы
Урок «Кэширование зависимостей для ускорения сборок» бесплатный?
Да — полный текст урока «Кэширование зависимостей для ускорения сборок» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Кэширование зависимостей для ускорения сборок»?
Ускорьте конвейеры CI, кэшируя зависимости и артефакты сборки с помощью действия actions/cache, ключей и ключей восстановления Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Кэширование зависимостей для ускорения сборок»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Триггеры и события рабочих процессов
- Запуск тестов с GitHub Actions
- Линтинг и проверки качества кода
- Кэширование зависимостей для ускорения сборок