持续交付管道需要可预测的软件和依赖版本。 Maven软件项目中常见的快照版本与“持续交付”背后的动机背道而驰。
为了将快照版本更新为发行版本,开发人员通常手动或通过诸如maven-release-plugin
来编辑pom.xml
文件。 但是,Maven还提供了将版本号定义为属性的可能性,这更适合持续交付世界。
它可以使用占位符,如${revision}
为神器版本,描述在这里 。 因此,我们可以定义一个包含语义版本的版本,该语义版本包括CI服务器的内部版本号作为元数据:
<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>
<groupId>com.sebastian-daschner</groupId>
<artifactId>hello-world</artifactId>
<version>${revision}</version>
...
<properties>
<!-- will be overridden in CD pipeline -->
<buildNumber>local</buildNumber>
<revision>1.0.0+${buildNumber}</revision>
...
</properties>
</project>
为了发布不会在任何环境上发布的本地版本,我们照常调用mvn clean package
。 这将导致工件版本1.0.0+local
。
持续集成服务器将调用Maven构建,类似于: mvn clean package -DbuildNumber=b${buildNumber}
-使用从当前管道构建中获取的构建号。 这将导致工件版本1.0.0+b123
1.0.0+b124
等。 设置相同的属性是为了mvn deploy
工件mvn deploy
到存储库。
此方法可方便地为本地构建指定可预测的版本和后备版本。 请务必注意,语义版本1.0.0
仅应由开发人员更改,因为它反映了API更改的性质和兼容性。
发现帖子有用吗? 订阅我的时事通讯,获取有关IT和Java的更多免费内容,技巧和窍门:
成功! 现在检查您的电子邮件以确认您的订阅。
翻译自: https://www.javacodegeeks.com/2017/12/continuous-delivery-friendly-maven-versions.html