Кэш задач
Кэш предназначен для того, чтобы при выполнении задач агент мог переиспользовать различные файлы, которые обычно необходимо скачать со сторонних ресурсов.
Например, для сборки Java приложения с помощью maven
или gradle
скачиваются из репозитория артефактов необходимые библиотеки (mavencentral). Такие библиотеки можно сохранить на машине, где запущен агент и переиспользовать их в тех задачах, в которых они необходимы.
Как работает кэширование
Основой кеширования для текущей версии агента, который использует Docker для выполнения задач конвейера, является общий для проекта том (Docker Volume). Для каждого экземпляра агента (виртуальной машины, на которой запущен агент) создается свой том для конкретного проекта. Данный том монтируется к каждому контейнеру, который запускается для выполнения конкретной задачи проекта. В каждом томе может храниться множество архивов, которые получаются из конкретной конфигурации кэша задачи.
Архивы с кэшем различаются названием, которое является хешем от строки, состоящей из ключей кэша. Последовательность ключей в конфигурации не важна, потому что перед тем, как получить хеш строки с ключами, список ключей сортируется. Если при конфигурировании кэша не указаны ключи для имени, то используется стандартное значение default
.
Пример конфигурации кэша:
- без ключей кеширования. В данном случае для ключа кэширования применится значение
default
.
cache:
paths:
- .m2/repository/
- с ключами кеширования
maven
иbuild
cache:
key:
- maven
- build
paths:
- .m2/repository/
Процесс работы задачи с кэшем
При запуске каждой задачи агентом, агент проверяет наличие доступного для работы кеша нужного для проекта. Если необходимый архив с кэшем найден, тогда этот архив распаковывается в рабочую директорию задачи. После завершения выполнения всех скриптов задачи агент ищет подходящие для кеширования файлы и папки, после этого эти файлы и папки упаковываются в архив, который отправляется на хранение в нужный для кэша том. Старый архив заменяется новым.