Мы запускаем нашу CI на Дженкинс. На изображении ниже приведено приличное объяснение всей настройки (несущественные шаги для простоты удалены).
![enter image description here](https://i.stack.imgur.com/ueZH6.jpg)
Подводя итог, наш общий процесс:
- У нас есть главный и более мощный агентский компьютер (обе виртуальные машины работают в облаке) работает все наши CI.
- В настоящее время у нас есть 26 git репо, которые управляются этой системой.
- Все наши задания CI являются многоотраслевым проектом Jenkins.
- Все репозитории являются проектами Gradle.
Детали Jenkins: 1. Все задания CI выполняются на агенте Jenkins. 2. В агенте Jenkins настроено 4 исполнителя.
Проблема:
Несколько сборок Gradle, работающих параллельно друг с другом. Все сборки Gradle используют один и тот же глобальный кэш ( / var / lib / jenkins / .gradle / caches ), и в то время как один исполнитель пытается скомпилировать, другой исполнитель запускается без ошибок:
rm -rf /var/lib/jenkins/.gradle/caches
Это приводит к таким проблемам, как:
- Ошибка компиляции
- Класс не найден
- Не удалось разрешить все артефакты для конфигурации ': classpath'.
et c.
Чтобы обойти это, я отключил кэширование сборки , Это определенно стабилизировало сборки, но теперь выполнение задачи CI занимает около 40% больше времени. Итак, я должен включить обратное кэширование как можно скорее.
Вопрос:
Каков оптимальный выход из этого? Я рассматриваю возможность настройки отдельного глобального кэша для каждого проекта (в root проекта), но еще не тестировал его. Есть ли у вас другие предложения?
Любой указатель высоко ценится. Заранее спасибо.