Цель обновлений Maven создает старую версию в Jenkins

У меня есть сборка 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), и поведение такое же

person Christopher Hunter    schedule 20.05.2015    source источник


Ответы (1)


То, что вы хотите достичь, невозможно с текущими версиями maven, как указано в разделе Использование плагина versions-maven:

Maven 2.0, 2.1, 2.2 и 3.0 в настоящее время не поддерживают модификации для повторного чтения pom.xml при одном вызове Maven.

Как насчет добавления здесь еще одного шага сборки?

person Torsten    schedule 20.05.2015
comment
Пропустил эту деталь! Я предполагаю, что добавление еще одного шага сборки - действительно единственный способ сделать это. Спасибо. - person Christopher Hunter; 21.05.2015