2015-05-20 5 views
2

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

ответ

1

То, что вы хотите достичь не возможно с текущей версией Maven, как указано в Usage section в versions- maven-plugin:

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

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

+0

Пропущенный деталь! Я предполагаю, что добавление другого шага сборки - это единственный способ сделать это. Благодарю. –