Представьте, что у меня есть проект Maven со следующей структурой:
-- Client (Used as dependency in other projects to communicate with Server)
---- pom.xml
-- Common (Domain module with classes used by both Client and Server)
---- pom.xml
-- Server (Actual application that is deployed and served in production)
---- pom.xml
pom.xml
И Сервер, и Клиент зависят от общего.
Я ищу решение, в котором мое решение CI (Jenkins) может оценить, были ли какие-либо изменения в каком-либо из дочерних модулей в моем SCM с момента последней успешной сборки соответствующей сборки (не уверен, что лучший способ отследить эту последнюю успешную сборку, возможно, с использованием тегов git). Это связано с тем, что в каждом конвейере у меня разные поведения для каждого модуля, и я не хочу излишне запускать их все, когда был изменен только один. Я ожидаю следующего поведения:
- Если клиент был изменен, установите модуль клиента и разверните его на удаленном Nexus. (Процесс затенения Клиента уже включает в себя Общий модуль, поэтому его также не нужно развертывать.)
- Если Сервер был изменен, установите модуль Сервера и разверните его для производства процесса затенения Сервера такжевключает в себя общий модуль)
- Если общее было изменено, установите модули клиента и сервера и разверните их.
Не имеет значения, я обновляю версию модуля сервера в pom.xml, но мне нужно отслеживать версию в модуле Client (поскольку она используется в качестве зависимости в других проектах).