更新 #1 9/18
我的公司决定彻底重新设计开发/发布周期以适应不断增长的开发人员数量。
git流程将类似于成功的分支模型,但会有一些变化。开发人员不再直接对“develop”分支进行推送访问,他们需要提出合并/拉取请求,并进行代码审核和基本单元测试。
版本系统将采用 Major.Minor.Patch,其中 Major 版本标记向后兼容性断裂,Minor 版本标记新功能和小错误修复,而 Patch 标记重要的热修复。这个新版本系统将删除 Jenkins 构建编号作为有用信息,但将其附加到部署的工件中以供历史记录。
“develop”分支将由 Jenkins 跟踪以构建并部署一个 SNAPSHOT 到我们本地的 Nexus,因此未发布但已接受的功能可供开发人员使用。“master”分支也将由 Jenkins 跟踪以构建并部署发布工件。
发布过程将包括:
- 基于已发布的功能更新 POM 版本
- 使用新版本对分支进行 Git 标记
- 执行单元、集成和系统测试。
- 构建、混淆和部署发布工件到我们的 Nexus
- 将“develop”分支版本更新为“Major.Minor++-SNAPSHOT”,以便进行新开发的 SNAPSHOT。
原始帖子
我正在尝试构建一个 JAR 库,该库经过混淆,使用基于 Jenkins/Hudson 构建的动态构建号,并部署到内部 Sonatype Nexus。
我的问题是 Maven install/deploy 不会遵循 finalName 的更改,并且使用以下表达式设置版本被认为是“不良实践”:
<version>1.0.${buildNumber}</version>
尽管这是不好的做法,但它可以正确地安装/部署具有正确版本的工件,包括本地和远程。构建编号基于一对与Jenkins构建系统的构建编号环境变量存在相关联的配置文件,并在缺少该变量时默认为0:
<profile>
<id>static_build_number</id>
<activation>
<property>
<name>!env.BUILD_NUMBER</name>
</property>
</activation>
<properties>
<buildNumber>0</buildNumber>
</properties>
</profile>
<profile>
<id>dynamic_build_number</id>
<activation>
<property>
<name>env.BUILD_NUMBER</name>
</property>
</activation>
<properties>
<buildNumber>${env.BUILD_NUMBER}</buildNumber>
</properties>
</profile>
我们不使用SNAPSHOT版本,因为提交并推送到Nexus的任何版本都被视为经过测试的发布版本。
是否有一种“正确”的方法可以根据Jenkins/Hudson动态构建号设置Maven版本,使其能够部署该更新版本?