Мы используем Git, Jenkins и Artifactory в качестве CI / CD-конвейера.
У нас большая база кода, и каждый раз для полной сборки требуется много времени. Например, у нас есть сводный проект pom, содержащий более 100 модулей. Родительский файл pom.xml
выглядит следующим образом:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.sample</groupId>
<artifactId>project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>module-1</module>
<module>module-2</module>
<module>module-n</module>
</modules>
</project>
Мы используем эту структуру, потому что некоторые модули зависят от других. Кроме того, мы хотим централизовать общие зависимости, RelationshipManagement и PluginManagement в этом родительском pom-файле вместо того, чтобы поддерживать более 100 pom-файлов на модуль.
Поскольку изменения могут происходить не на всех модулях, мы хотим ускорить процесс сборки, собирая только затронутые модули с момента последней успешной сборки. Это может сделать Maven.
Пример: mvn clean install -pl module1,module2,module3 -amd -am
Легко, если разработчик знает, какие модули были изменены. Если нет, какой-нибудь плагин maven может помочь разработчику обнаружить незафиксированные изменения по сравнению с git-репозиторием. Или некоторые люди могут сделать mvn install -amd -pl $(git status | grep -E "modified:|deleted:|added:" | awk '{print $2}' | cut -f1 -d"/")
Но эти решения не подходят для нашего конвейера Jenkins. Сервер Jenkins всегда извлекает последнюю версию проекта из git и запускает сборку. Я не знаю, есть ли у Jenkins возможность определить, какие модули были изменены из истории git и из истории его сборки (какая-либо информация о состоянии?). Кроме того, мы запускаем несколько процессов Jenkins slaves. Задание на сборку не всегда придерживается одной и той же рабочей области компьютера.
Я искал один плагин Jenkins, кажется, может решить мою проблему.
https://wiki.jenkins.io/display/JENKINS/Maven+Project+Plugin
Я попытался установить свежую последнюю версию Jenkins с этим плагином, но все еще не смог найти функцию «Инкрементная сборка - только сборка измененных модулей».
Может ли кто-нибудь предложить некоторые способы (с помощью плагинов или сценариев Мануэля), чтобы помочь создавать только измененные модули в Jenkins? Я искал много дней и все еще не мог найти работоспособное решение. Я был бы очень признателен, если бы кто-нибудь мог дать мне некоторое представление или указание, как мы должны это сделать. Большое спасибо!