Кэш задач


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

Например, для сборки Java приложения с помощью maven или gradle скачиваются из репозитория артефактов необходимые библиотеки (mavencentral). Такие библиотеки можно сохранить на машине, где запущен агент и переиспользовать их в тех задачах, в которых они необходимы.

Как работает кэширование

Основой кеширования для текущей версии агента, который использует Docker для выполнения задач конвейера, является общий для проекта том (Docker Volume). Для каждого экземпляра агента (виртуальной машины, на которой запущен агент) создается свой том для конкретного проекта. Данный том монтируется к каждому контейнеру, который запускается для выполнения конкретной задачи проекта. В каждом томе может храниться множество архивов, которые получаются из конкретной конфигурации кэша задачи.

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

Пример конфигурации кэша:

  • без ключей кеширования. В данном случае для ключа кэширования применится значение default.
cache:
  paths:
    - .m2/repository/
  • с ключами кеширования maven и build
cache:
  key:
    - maven
    - build
  paths:
    - .m2/repository/

Процесс работы задачи с кэшем

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

Отключение кэша для определенных jobs

Если вы определяете кэш глобально для всего pipeline, каждое задание использует одно и то же определение. Вы можете переопределить это поведение для каждого job.

Чтобы полностью отключить его для job, используйте пустой список:

job:
  cache: []

Есть возможность отдельно конфигрурировать кеш для задачи: если для задачи указан кеш + пути (paths: ключевое слово, непустой массив путей), то эта конфигурация перезапишет глобальную для job, если нет (не указан кеш или пути), то будет использоваться глобальная для job, если таковая есть.