Что такое кеш в GitLab CI/CD?

«Что такое кеш в GitLab CI/CD?» — вопрос из категории DevOps, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В GitLab CI/CD кеш — это механизм для сохранения файлов и директорий между разными запусками пайплайнов в рамках одного проекта. Его основная цель — ускорить выполнение jobs за счет повторного использования зависимостей (например, пакетов, скомпилированных объектов), избегая их повторной загрузки или сборки.

Базовый пример конфигурации в .gitlab-ci.yml:

cache:
  key: ${CI_COMMIT_REF_SLUG}           # Уникальный ключ (часто по ветке)
  paths:
    - node_modules/                    # Кешируемые пути
    - .gradle/caches/
  policy: pull-push                    # Политика: скачать и обновить кеш

build_job:
  script:
    - npm ci                           # Быстрая установка из кешированных node_modules

Ключевые особенности и практика:

  • Ключ (key): Определяет версию кеша. Использование $CI_COMMIT_REF_SLUG создает отдельный кеш для каждой ветки.
  • Политики (policy):
    • pull-push (по умолчанию): job скачивает существующий кеш и обновляет его.
    • pull: job только использует кеш, но не обновляет его (полезно для deploy-стадий).
    • push: job только создает/обновляет кеш.
  • Кеш vs Артефакты: Кеш не гарантирует сохранность и предназначен для ускорения сборки. Для передачи билдов между стадиями используйте artifacts.
  • Очистка: Кеш может быть удален администратором или при нехватке места, поэтому критичные данные в нем хранить нельзя.