параллельные сборки gradle, работающие на jenkins, вызывающие проблему с глобальным кэшем gradle - PullRequest
0 голосов
/ 22 января 2020

Мы запускаем нашу CI на Дженкинс. На изображении ниже приведено приличное объяснение всей настройки (несущественные шаги для простоты удалены).

enter image description here

Подводя итог, наш общий процесс:

  1. У нас есть главный и более мощный агентский компьютер (обе виртуальные машины работают в облаке) работает все наши CI.
  2. В настоящее время у нас есть 26 git репо, которые управляются этой системой.
  3. Все наши задания CI являются многоотраслевым проектом Jenkins.
  4. Все репозитории являются проектами Gradle.

Детали Jenkins: 1. Все задания CI выполняются на агенте Jenkins. 2. В агенте Jenkins настроено 4 исполнителя.

Проблема:

Несколько сборок Gradle, работающих параллельно друг с другом. Все сборки Gradle используют один и тот же глобальный кэш ( / var / lib / jenkins / .gradle / caches ), и в то время как один исполнитель пытается скомпилировать, другой исполнитель запускается без ошибок:

rm -rf /var/lib/jenkins/.gradle/caches

Это приводит к таким проблемам, как:

  1. Ошибка компиляции
  2. Класс не найден
  3. Не удалось разрешить все артефакты для конфигурации ': classpath'.

et c.

Чтобы обойти это, я отключил кэширование сборки , Это определенно стабилизировало сборки, но теперь выполнение задачи CI занимает около 40% больше времени. Итак, я должен включить обратное кэширование как можно скорее.

Вопрос:

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

Любой указатель высоко ценится. Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...