0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · Урок

Кэширование зависимостей для ускорения

Реализуйте кэширование, чтобы значительно ускорить выполнение рабочих процессов за счёт повторного использования созданных зависимостей и результатов сборки.

«Кэширование зависимостей для ускорения» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Матричные сборки для нескольких сред
  2. Кэширование зависимостей для ускорения
  3. Повторно используемые рабочие процессы и действия
  4. Условное выполнение и зависимости заданий
← Назад к CI/CD with GitHub Actions & DevOps Pipelines