У меня есть сборка Jenkins / maven, в которой нам нужно иметь возможность создавать артефакты выпуска с произвольными номерами версий. Номер версии передается как параметр в задание сборки. Я использую versions:set
для обновления версии с того, что находится в pom.xml, до параметра $ VERSION. При запуске сборки выясняется, что maven действительно обновляет версию в рабочей копии pom.xml, однако он создает артефакт со старым номером версии.
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>
Вызов целей maven верхнего уровня в задании Jenkins:
-V
-B
-e
-U
clean
versions:set
-DnewVersion=${VERSION}
package
deploy
-Dmaven.test.skip=true
Результат моей сборки выглядит примерно так (с $ VERSION 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] ------------------------------------------------------------------------
Я заметил, что хотя первоначальный запуск будет построен со старой версией, если рабочий каталог не будет восстановлен, последующие запуски будут правильно построены с новой версией в обновленном pom.xml. Как я могу обновить pom-файл до новой версии до создания артефактов?
Ограничения:
- Хотя мы можем внести изменения в pom.xml, это не находится под нашим контролем и является менее практичным решением. В идеальном мире pom уже был бы обновлен до правильной версии, и мы бы вообще этого не делали.
- Я знаю, что могу просто добавить шаг оболочки перед сборкой maven и выполнить замену sed на pom.xml или что-то подобное. Это действительно работает, но это некрасиво и не будет хорошо масштабироваться с более сложными помпонами. Нативное решение maven очень предпочтительно.
- Я тестировал это независимо от Дженкинса (т.е.
mvn versions:set -DnewVersion=0.1.2
), и поведение такое же