首页 > 解决方案 > Maven父子pom使用Azure devops自增版本

问题描述

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

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

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

标签: mavenazure-devopsparent-pom

解决方案


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

变量可以通过一些量和变量组合(包括自定义变量、预定义变量和一些表达式)。这样,您几乎可以尽可能自由地设置版本号。

在文件中,您可以使用变量名称pom.xml填充版本字段。

在此处输入图像描述

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

例如:

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

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

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


推荐阅读