我正在尝试为具有两个分支的项目统一两个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]
答案 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)
这是我为那些需要帮助的人所做的。
-SNAPSHOT
文本,prod分支是可选的。-SNAPSHOT
文本并将.$BUILD_NUMBER
附加到随后使用versions:set设置的版本。所以把它放在一起。
预构建脚本:如果有人能告诉我更清楚的方法来获取我想知道的版本号:
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分支。