CI/CDПрактические руководстваКэширование зависимостей

Кеширование зависимостей

Кеширование позволяет значительно ускорить сборки, повторно используя результаты предыдущих запусков (например, уже загруженные зависимости) вместо того, чтобы заново загружать их при каждом запуске workflow.

В GitVerse можно использовать механизм кеширования аналогично GitHub Actions — с помощью специального действия actions/cache. Ниже приведен пример использования кеша для Node.js-проекта (npm-пакеты):

name: CI with cache
on:
  push:
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
 
      - name: Restore npm cache
        uses: actions/cache@v3
        with:
          path: ~/.npm        # директория с кешем npm (глобальный кеш пакетов)
          key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
          restore-keys: ${{ runner.os }}-npm-
 
      - name: Install dependencies
        run: npm ci
 
      - name: Run tests
        run: npm test

Как это работает: шаг actions/cache пытается восстановить кеш по ключу ubuntu-latest-npm-<hash> (хеш вычисляется на основе файла package-lock.json). Если подходящий кеш найден, содержимое директории ~/.npm будет восстановлено, и команда npm ci установит зависимости из локального кеша быстрее. Если кеш не найден (например, при первом запуске), зависимости будут скачаны с нуля, а по завершении job — сохранены под новым ключом для будущих запусков.

В ключе кеша удобно включать хеш файла зависимостей (lock-file), чтобы при изменении списка зависимостей автоматически создавался новый кеш.

При последующих запусках workflow с тем же набором зависимостей шаг установки будет выполняться значительно быстрее, так как пакеты будут браться из кеша. Аналогично можно кешировать артефакты сборки, каталоги из библиотеки и другие ресурсоемкие части pipeline.

Обратите внимание, что у кеша также могут быть ограничения по объему и времени хранения — в GitVerse по умолчанию кеш хранится ограниченное время, актуальные лимиты можно уточнить в документации.