Перейти к основному содержимому

Основы кэша сборки Gradle

· 4 мин. чтения

1. Обзор

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

2. Что такое кэш сборки Gradle?

Кэш сборки Gradle — это полупостоянное хранилище, в котором сохраняются выходные данные задач сборки. Это позволяет повторно использовать уже созданные артефакты из предыдущих сборок. Руководящий принцип кэша сборки Gradle заключается в том, что он должен избегать перестроения задач, которые уже были созданы, при условии, что входные данные не изменились. Таким образом, время на выполнение последующих сборок сокращается.

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

Теперь давайте рассмотрим два разных типа кешей сборки Gradle.

2.1. Локальный кеш сборки

Локальный кеш сборки использует системный каталог для хранения выходных данных задач. Расположением по умолчанию является домашний каталог пользователя Gradle, который указывает на $USER_HOME/.gradle/caches . Каждый раз, когда мы запускаем сборку в нашей системе, здесь будут храниться артефакты. Он включен по умолчанию, и его расположение можно настроить.

2.2. Кэш удаленной сборки

Удаленный кеш — это общий кеш сборки. Чтение и запись в удаленный кэш выполняются через HTTP. Одним из наиболее распространенных вариантов использования удаленного кэша являются сборки с непрерывной интеграцией. При каждой чистой сборке сервер CI заполняет удаленный кеш. Таким образом, измененные компоненты не будут пересобираться, что ускоряет сборку CI. Кроме того, агенты CI могут совместно использовать результаты задач. Удаленный кеш не включен по умолчанию.

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

3. Настройка кэша сборки Gradle

Мы можем настроить кеши, предоставив блок Settings.build-cache в файле settings.gradle . Здесь мы используем замыкания Groovy для записи конфигураций. Давайте посмотрим, как настроить различные типы кеша.

3.1. Настройка локального кэша сборки

Добавим конфигурацию локального кеша сборки в файл settings.gradle :

buildCache {
local {
directory = new File(rootDir, 'build-cache')
removeUnusedEntriesAfterDays = 30
}
}

В приведенном выше блоке кода объект каталога представляет собой место для хранения выходных данных сборки. Здесь переменная rootDir представляет корневой каталог проекта. Мы также можем изменить объект каталога , чтобы он указывал на другое место.

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

Мы также можем очистить его вручную, удалив записи из папки $USER_HOME/.gradle/caches . В системе Linux мы можем использовать команду rm для очистки каталога:

rm -r $HOME/.gradle/caches

Мы также можем настроить некоторые дополнительные свойства. Например, enabled — это логическое свойство, которое показывает, включен ли локальный кеш. Выходные данные сборки будут храниться в кеше, если для свойства push установлено значение true . Его значение по умолчанию истинно для локального кэша сборки.

3.2. Настройка удаленного кэша

Давайте добавим блок buildCache в файл settings.gradle для настройки удаленного кеша.

Для удаленного кеша нам нужно указать местоположение в виде URL-адреса, а также имя пользователя и пароль для доступа к нему:

buildCache {
remote(HttpBuildCache) {
url = 'https://example.com:8123/cache/'
credentials {
username = 'build-cache-user-name'
password = 'build-cache-password'
}
}
}

4. Преимущества использования кэша сборки Gradle

Теперь давайте рассмотрим некоторые преимущества использования кэша сборки Gradle:

  • Это может повысить производительность разработчика за счет сокращения времени сборки.
  • Поскольку выходные данные задачи используются повторно, если входные данные не изменяются, это также может помочь сократить время сборки при переключении между ветвями управления версиями.
  • Использование удаленного кэша может значительно сократить объем работы, которую необходимо выполнить агентам CI для создания сборок. Это также уменьшает инфраструктуру, необходимую для сборок CI.
  • Снижает использование сети на машинах CI, так как результаты из удаленного кеша будут храниться в локальном кеше.
  • Удаленный кеш может помочь в обмене результатами между разработчиками. Это устраняет необходимость повторной сборки изменений, внесенных локально другими разработчиками, работающими над тем же проектом.
  • Удаленный кеш также может обеспечивать совместное использование сборок агентами CI.
  • Поскольку время сборки сокращается, это приводит к более быстрым циклам обратной связи. Следовательно, сборки будут генерироваться чаще. Следовательно, это может улучшить качество программного обеспечения.

5. Вывод

В этой статье мы узнали о кеше сборки Gradle и о том, как он ускоряет процесс сборки. Мы также изучили его различные типы и их конфигурацию. Наконец, мы обсудили преимущества кэша сборки Gradle.