У меня есть сборка Jenkins/maven, где мы должны иметь возможность выпускать артефакты выпуска с произвольными номерами версий. Номер версии передается как параметр в задание сборки. Я использую versions:set
, чтобы обновить версию из того, что находится в pom.xml, к параметру $ VERSION. Когда сборка запускается, кажется, что maven действительно обновляет версию в рабочей копии pom.xml, однако строит артефакт со старым номером версии.Maven обновляет версии цели строит старую версию в Jenkins
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<name>someservice</name>
<groupId>com.domain.group</groupId>
<artifactId>someservice</artifactId>
<version>1.0.0-SNAPSHOT</version>
Invoke цели Maven верхнего уровня в Дженкинс работы:
-V
-B
-e
-U
clean
versions:set
-DnewVersion=${VERSION}
package
deploy
-Dmaven.test.skip=true
Мой вывод сборки выглядит примерно так (с $ ВЕРСИИ 0.1.2)
[INFO] ------------------------------------------------------------------------
[INFO] Building someservice 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- versions-maven-plugin:2.2:set (default-cli) @ someservice ---
[INFO] Searching for local aggregator root...
[INFO] Local aggregation root: /svn/group/someservice/trunk
[INFO] Processing change of com.domain.group:someservice:1.0.0-SNAPSHOT -> 0.1.2
[INFO] Processing com.domain.group:someservice
[INFO] Updating project com.domain.group:someservice
[INFO] from version 1.0.0-SNAPSHOT to 0.1.2
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 5.147s
[INFO] Finished at: Wed May 20 11:40:46 PDT 2015
[INFO] Final Memory: 10M/180M
[INFO] ------------------------------------------------------------------------
Я заметил, что, хотя первоначальный запуск будет построен со старой версией, если рабочий каталог не возвращается ed, последующие прогоны будут правильно построены с новой версией в обновленном pom.xml. Как я могу получить файл pom, обновленный с новой версией до, создаются артефакты?
Ограничения:
- Хотя это может быть возможным для нас, чтобы изменения, внесенные в pom.xml, это не непосредственно под нашим контролем и является менее практичным решением. В идеальном мире pom уже будет обновляться с правильной версией, и мы не будем этого делать вообще.
- Я знаю, что могу просто добавить шаг оболочки до сборки maven и выполнить замену sed на pom.xml или что-то подобное. Это работает, но это уродливо и не будет хорошо масштабироваться с более сложными порами. Натуральное решение maven является очень предпочтительным.
- Я проверил это независимо от Дженкинс, (т.е.
mvn versions:set -DnewVersion=0.1.2
) и поведение такое же
Пропущенный деталь! Я предполагаю, что добавление другого шага сборки - это единственный способ сделать это. Благодарю. –