В нашей организации мы поддерживаем один репозиторий git, из которого мы строим несколько микросервисов.Мы используем Java (пружинную загрузку) и maven для построения сервисов.
Каждый микросервис находится в своем собственном модуле maven + есть «общие» (инфраструктурные) модули, которые появляются (включаются как зависимости) во всех наших микросервисах.
В настоящее время мы не продвигаем версии артефактов maven: всегда запускайте с 0.1-SNAPSHOT в maven и выполняйте процесс CD, т.е. каждый коммит достигает наших серверов
Теперь яМы ищем эффективный способ создания нашего материала.
В настоящее время у нас есть Jenkins с рабами, которые по требованию работают в облаке при каждом коммите.У нас есть одно задание Jenkins на микросервис.
Когда кто-то выполняет коммит, мы запускаем сборки для всех микросервисов, , даже если зафиксированные файлы используются только одним микросервисом сследующая команда:
mvn --projects backend/microsevice-a --also-make
mvn --projects backend/microsevice-b --also-make
....
mvn --projects backend/microsevice-N --also-make
Итак, мы каждый раз собираем микросервис со всеми его зависимостями, что не оптимально.
Я ищу способ использовать сборку только модулейкоторые содержат код, который был изменен во время последнего коммита (ов)
Одним из решений, о котором мы думали, является использование nexus / artifactory и введение полноценной поддержки версий, так что каждый раз, когда jenkins строит свои вещи, этоопубликует версию, скажем, в артефакте, так что позже Дженкинс сможет вынуть «готовые» версии из артефакта, но это выглядит очень сложным подходом, потому что я не смогу реально отследить, какая зависимость вкакая версия была развернута с моим микросервисом.
Поскольку я не являюсь разработчиком / разработчиком DevOps, яруд к следующему подходу:
- Создайте некоторый плагин (maven / Jenkins) - который может анализировать информацию из последнего коммита, анализировать дерево зависимостей всего бэкэнд-проекта и выяснять, какие микросервисы должны бытьперестроен, но похоже на кастомную разработку, я не уверен, что другие люди делают, может быть, он уже доступен в Jenkins / maven - я не знаю ...
Пожалуйста, поделитесьВаше мнение об этих подходах / предложить альтернативы Помощь приветствуется:)