Повторное использование кэша Gradle в агентах Teamcity CI - PullRequest
1 голос
/ 20 апреля 2020

Учитывая, что у меня есть несколько агентов, которые создают приложения на основе Gradle 5.X, я бы хотел начать кэширование зависимостей Gradle для всех агентов.

Я попытался открыть общий доступ к папке .gradle, но при попытке запустить одну и ту же сборку на 2 агентах, один из которых не работает на:

Caused by: org.gradle.api.UncheckedIOException: 

Failed to create parent directory '/home/buildagent/.gradle/caches/5.0' 

when creating directory '/home/buildagent/.gradle/caches/5.0/generated-gradle-jars'

Как я могу поделиться зависимостями между агентами Teamcity?

Существует ли универсальное решение c, которое будет поддерживать Gradle 5 лет вперед?

Я нашел это в Документация Gradle 6.x , но я ничего не нашел в 5.x документации.

1 Ответ

0 голосов
/ 23 апреля 2020

Я не могу сказать, что является причиной root полученного исключения, поскольку сообщение довольно редкое. Все, что я могу сказать, это то, что для Gradle 5 нет встроенного решения для совместного использования локального кэша через сеть, как вы хотели бы сделать. Возможность копирования и повторного использования кеша , о которой вы упоминали, была введена в Gradle 6.1 и имеет некоторые ограничения:

  • Она в первую очередь предназначена для копирования содержимого на другие машины, возможно, с другими структуры каталогов (перемещение кэша).
  • Поддерживает только кэш модуля ($GRADLE_HOME/caches/modules-<version>)
  • Общие сетевые ресурсы, скорее всего, работают только как кэш зависимостей только для чтения .

Итак, что такое портативное решение, которое подходит для Gradle 5 и 6? В соответствии с заявкой, в которой изначально вводилось многократное использование кэша ( Сделать кэши зависимостей перемещаемыми # 1338 ):

  1. Копировать, а не подключаться к сети, папку. Структура каталогов должна оставаться согласованной на разных компьютерах.
  2. Смонтировать ранее экспортированный репозиторий со своими зависимостями:

    Написать задачу Gradle, которая создает репозиторий файлов из ваших зависимостей, и упаковать этот репозиторий файлов. Затем добавьте в вашу сборку logi c, который говорит: «Если этот файловый репозиторий присутствует, используйте его».

    (из этот комментарий )

...