Кэширование зависимостей для ускорения
Реализуйте кэширование, чтобы значительно ускорить выполнение рабочих процессов за счёт повторного использования созданных зависимостей и результатов сборки.
«Кэширование зависимостей для ускорения» — бесплатный урок CI/CD with GitHub Actions & DevOps Pipelines на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CI/CD with GitHub Actions & DevOps Pipelines, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CI/CD with GitHub Actions & DevOps Pipelines содержит 4 уроков всего.
Ускорение рабочих процессов с помощью кэширования
Замечали, что рабочий процесс каждый раз заново скачивает одни и те же зависимости? Это замедляет работу!
Кэширование в GitHub Actions позволяет сохранять и повторно использовать файлы из предыдущих запусков. Это значительно ускоряет последующие выполнения рабочих процессов.
Знакомство с действием кэширования
GitHub предоставляет специальное действие под названием actions/cache@v3. Это действие предназначено для сохранения и восстановления файлов, чтобы ускорить рабочие процессы.
Оно работает интеллектуально: проверяет наличие кэша перед попыткой его восстановить и сохраняет данные, если кэша ещё нет.
Ключ и путь кэша
Два важных параметра для actions/cache — это key и path:
key: уникальная строка, идентифицирующая Ваш кэш. Если кэш с этим ключом найден, он восстанавливается.path: пути к файлам или каталоги, которые Вы хотите кэшировать. Так действие понимает, *что* сохранять или восстанавливать.
Ключ часто включает хэш файлов зависимостей, чтобы кэш становился недействительным при изменении зависимостей.
Кэширование зависимостей Node.js
Давайте закэшируем node_modules для проекта на Node.js. Мы используем hashFiles, чтобы создать динамический ключ на основе package-lock.json.
Попробуйте запустить этот простой фрагмент рабочего процесса:
name: Node.js CI with Cache
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Cache Node.js modules
uses: actions/cache@v3
with:
path: node_modules
key: npm-${{ hashFiles('package-lock.json') }}
restore-keys: |
npm-
- name: Install dependencies
run: npm ci
- name: Run tests
run: npm testРезервный вариант с ключами восстановления
Что делать, если Ваш точный key не соответствует кэшу? Здесь пригодятся ключи restore-keys!
restore-keys задают список резервных ключей для поиска. Если основной ключ, например npm-${{ hashFiles(...) }}, не найден, GitHub Actions пытается найти кэш с помощью ключей restore-keys по порядку.
В нашем примере npm- используется для поиска любого кэша, начинающегося с "npm-". Это полезно, если изменились только незначительные версии зависимостей.
Кэширование зависимостей Python
Кэширование предназначено не только для Node.js! Тот же принцип можно применять к другим языкам, например Python. Здесь мы кэшируем виртуальную среду Python и кэш pip.
В этом случае ключ использует hashFiles('requirements.txt'), а путь указывает на виртуальную среду и каталог кэша pip.
name: Python CI with Cache
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Cache Python dependencies
uses: actions/cache@v3
with:
path: |
~/.cache/pip
.venv
key: pip-${{ hashFiles('requirements.txt') }}
restore-keys: |
pip-
- name: Install dependencies
run: |
python -m venv .venv
.venv/bin/pip install -r requirements.txt
- name: Run tests
run: .venv/bin/python -m unittest discoverКогда следует обновлять кэш
Кэш полезен, только если он достаточно актуален. Если зависимости меняются, кэш тоже должен обновляться!
Кэш автоматически становится недействительным, если изменяется основной key, например npm-${{ hashFiles('package-lock.json') }}. Если package-lock.json обновлён, хэш изменяется и создаётся новый кэш.
Вы также можете принудительно пересоздать кэш, вручную изменив ключ, например добавив суффикс версии: npm-v2-${{ hashFiles(...) }}.
Область действия и ограничения кэша
Полезно знать, как кэширование работает внутри системы:
- Область действия: кэши имеют отдельную область действия для каждого репозитория и каждой ветки. Кэш в ветке
mainне будет использоваться в функциональной ветке, если явно не настроитьlookup-path. - Ограничение размера: размер каждого кэша может достигать 10 ГБ.
- Срок хранения: кэши хранятся в течение 7 дней после последнего обращения. Старые неиспользуемые кэши удаляются автоматически.
Эффективные методы кэширования
Чтобы использовать кэширование максимально эффективно:
- Используйте
hashFiles: всегда связывайте ключ кэша с файлами манифестов зависимостей, напримерpackage-lock.jsonиrequirements.txt. - Точно указывайте
path: кэшируйте только необходимое, напримерnode_modulesи~/.cache/pip. - Используйте
restore-keys: задавайте резервные ключи для повышения частоты попаданий в кэш. - Не кэшируйте изменчивые данные: не кэшируйте файлы, которые часто меняются или очень велики и уникальны для каждого запуска, например артефакты сборки, предназначенные для развертывания.
Задача о ключе кэша
У Вас есть проект на Java, использующий Maven. Его зависимости определены в pom.xml, а Maven обычно сохраняет загруженные JAR-файлы в ~/.m2/repository.
Какая конфигурация кэша лучше всего гарантирует, что зависимости Maven будут кэшироваться и корректно признаваться устаревшими при изменении pom.xml?
Повторение: кэширование для ускорения!
Отличная работа! Вы научились использовать кэширование в GitHub Actions, чтобы значительно ускорять рабочие процессы CI/CD.
- Действие
actions/cache— Ваш инструмент. - Используйте
keyиpath, чтобы определить, что и как кэшировать. hashFilesсоздаёт динамические ключи для интеллектуальной актуализации кэша.restore-keysпредоставляют полезные резервные варианты.
Разумное кэширование зависимостей экономит время сборки и вычислительные ресурсы, делая конвейеры эффективнее!
Часто задаваемые вопросы
Урок «Кэширование зависимостей для ускорения» бесплатный?
Да — полный текст урока «Кэширование зависимостей для ускорения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CI/CD with GitHub Actions & DevOps Pipelines, подпишись на CoddyKit PRO. Курс CI/CD with GitHub Actions & DevOps Pipelines содержит 4 уроков всего.
Чему я научусь в уроке «Кэширование зависимостей для ускорения»?
Реализуйте кэширование, чтобы значительно ускорить выполнение рабочих процессов за счёт повторного использования созданных зависимостей и результатов сборки. Ты практикуешь CI/CD with GitHub Actions & DevOps Pipelines с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CI/CD with GitHub Actions & DevOps Pipelines?
Предыдущий опыт не требуется. CI/CD with GitHub Actions & DevOps Pipelines на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Кэширование зависимостей для ускорения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CI/CD with GitHub Actions & DevOps Pipelines?
Да. Каждый урок CI/CD with GitHub Actions & DevOps Pipelines включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Матричные сборки для нескольких сред
- Кэширование зависимостей для ускорения
- Повторно используемые рабочие процессы и действия
- Условное выполнение и зависимости заданий