Сборка только затронутых модулей в Jenkins / Maven - PullRequest
0 голосов
/ 26 июня 2018

Мы используем 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? Я искал много дней и все еще не мог найти работоспособное решение. Я был бы очень признателен, если бы кто-нибудь мог дать мне некоторое представление или указание, как мы должны это сделать. Большое спасибо!

1 Ответ

0 голосов
/ 26 июня 2018

Вы можете сделать что-то подобное с плагином Multi Module Maven Release:

http://danielflower.github.io/multi-module-maven-release-plugin/index.html

Но также учтите: если ваши модули обычно собираются отдельно, почему они находятся в одном большом многомодульном проекте?

...