使用 Azure devops 的 Maven 父子 pom 自动增量版本

问题描述

我有多个基于 JHipster 构建的微服务,这些微服务过去是使用 Maven 单独构建的。现在我们有了一个父 pom,它将拥有所有可以多次构建的 API 的所有公共依赖项,并多次部署父 pom 的相同版本。所有 API 都将使用它作为父 pom。 问题是我们在构建过程中使用 Azure DevOps,其中常见的工件被发送到 Azure Artifacts,并且版本是不可变的。所以如果这个父pom要构建并打包到Azure Artifacts中,我需要弄清楚以下内容

  1. 如何根据所做的更改自动增加或不自动增加父 pom 的版本。 (为此,我尝试使用 maven-release-plugin 并自动增加版本,但如果有任何最佳实践,请告诉我,我现在使用认值。计划使用在子 pom 中也是如此,但不确定这是否是正确的方法)
  2. 如何确保使用此父 pom 的子项目能够在发布期间自动递增版本。

PS:之前我们遇到了一个问题,即公共存储库中的任何更改都需要开发人员在构建之前手动提升 pom 的版本,因为 Azure Artifacts 不允许构建相同的版本并将其部署到 Artifacts。

解决方法

您可以尝试在构建管道运行期间为父 pom 和每个子 pom 的版本生成一个变量。例如:PARENT_PACKAGE_VERSIONCHILD_01_PACKAGE_VERSIONCHILD_02_PACKAGE_VERSION、...

变量可以组合一些数量和变量(包括自定义变量,predefined variables和一些expressions)。这样,您几乎可以自由地设置版本号。

pom.xml 文件中,您可以使用变量名称填写 version 字段。

enter image description here

在管道中,设置一个shell脚本,使用if条件判断是否改变变量的值。 然后用 pom.xml 文件中的实际值替换变量名。

例如:

sed -i 's/PACKAGE_VERSION/$(PACKAGE_VERSION)/g' pom.xml

完成以上步骤后,构建并发布Maven包。

对于父pom的版本,为了避免发布相同版本号到Azure Artifacts导致的错误,可以设置多节点的版本号,例如<MajorVersion>.<MinorVersion>.<BatchVersion>. MajorVersionMinorVersion 可能不会经常更改。当父包和/或子包中发生任何更新时,BatchVersion 可以更改或自动增加。