如何通过应用系统属性来改变jenkins的内部版本号?

时间:2013-10-25 02:11:18

标签: git maven jenkins

我正在尝试为具有两个分支的项目统一两个CI配置文件。 master分支包含每晚构建一次的生产分支,dev分支包含开发分支。

要自动化DEV分支上的-SNAPSHOT后缀,我已应用以下POM。

<version>1.1.11${build.suffix}</version>
<properties>
    <build.suffix>-SNAPSHOT</build.suffix>
</properties>

然后我有两个构建配置,prod有一个-Dbuild.suffix=".$BUILD_NUMBER"分配给jenkins中的MAVEN_OPTS但maven似乎总是在没有后缀的情况下构建,并始终将-SNAPSHOT放在最后每个版本。

在本地运行它运行正常,即

mvn -Dbuild.suffix=".123" clean package

工作正常。

我也收到了以下警告,是否有更好的方法来做我想做的事情?

[WARNING] 
[WARNING] Some problems were encountered while building the effective model for com.johnsands:unite:war:1.1.11-SNAPSHOT
[WARNING] 'version' contains an expression but should be a constant. @ com.johnsands:unite:1.1.11${build.suffix}, /Users/bryan/Development/unite/pom.xml, line 11, column 12
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING] 

3 个答案:

答案 0 :(得分:1)

有一个reason为什么maven不再允许<version>标记中的表达式。复制/粘贴相关行...

  

部署的pom不会解析属性值,   所以任何依赖那个pom的人都会接受依赖   字符串未插入$ {},随之而来的是欢闹   在你的构建过程中。

您可以查看maven versions plugin,特别是mvn version:set,但这会改变pom.xml文件,在CI环境中没有意义。

答案 1 :(得分:0)

通常SNAPSHOT用于开发分支(master,prod,dev等)。所以离开SNAPSHOT是prod分支是好的。 更好的解决方案是使用XXX-FINAL-SNAPSHOT或带有XXX-DEV-SNAPSHOT的dev分支等样本对master / prod artefact进行版本控制。

master / prod发布的产品应该有版本-XXX,maven-release-plugin为你做这个。

答案 2 :(得分:0)

这是我为那些需要帮助的人所做的。

  1. 根据Raghuram's suggestion我使用maven versions plugin设置版本。
  2. 我的DEV分支始终包含-SNAPSHOT文本,prod分支是可选的。
  3. 我在PROD上使用预构建脚本来提取版本,删除-SNAPSHOT文本并将.$BUILD_NUMBER附加到随后使用versions:set设置的版本。
  4. 后期构建脚本将恢复版本插件为我们备份的原始pom。
  5. 所以把它放在一起。

    预构建脚本:如果有人能告诉我更清楚的方法来获取我想知道的版本号:

    ver=$(sed -n '/<version>/{p;q;}' pom.xml|grep '<version>'|sed 's/.*>\(.*\)<.*/\1/' | sed 's/-SNAPSHOT//').$BUILD_NUMBER
    echo "Setting version to $ver"
    mvn -DnewVersion="$ver" versions:set
    

    构建后脚本

    test -f pom.xml.versionsBackup && mv pom.xml.versionsBackup pom.xml 
    

    开发周期现在可以确保通常快速合并的bugfix分支不需要更新pom中的版本号,然后可以安全地将它们合并回prod分支。