You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Pipeline(YAML版)中自动更新Maven构件补丁版本?

嘿,这个需求在Maven+Azure Pipeline的场景里挺常见的,我给你两种靠谱的实现方案,你可以根据自己的偏好选择:

方案一:遵循Maven最佳实践(自动更新pom版本)

这种方案会自动把pom里的1.0-SNAPSHOT转为正式版本(比如1.0.1)发布,之后还会把pom版本更新为下一个快照版本(比如1.0.2-SNAPSHOT),完全符合Maven的版本管理规范。

1. 修改pom.xml

首先要配置好发布仓库和版本发布插件:

<!-- 配置你的发布仓库(比如Azure Artifacts) -->
<distributionManagement>
  <repository>
    <id>azure-artifacts-repo</id>
    <url>https://你的Azure Artifacts源地址</url>
  </repository>
</distributionManagement>

<build>
  <plugins>
    <!-- Maven发布插件,负责版本递增和发布 -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-release-plugin</artifactId>
      <version>3.0.1</version>
      <configuration>
        <!-- 自动跳过交互环节,适配CI环境 -->
        <autoVersionSubmodules>true</autoVersionSubmodules>
        <!-- 发布后自动更新pom版本为下一个快照版 -->
        <updateVersions>true</updateVersions>
        <!-- 发布时执行deploy命令,把构件推送到仓库 -->
        <goals>deploy</goals>
        <!-- 提交版本变更时的Git注释前缀 -->
        <scmCommentPrefix>[RELEASE] </scmCommentPrefix>
      </configuration>
    </plugin>
  </plugins>
</build>

2. 修改azure-pipelines.yml

添加认证和发布步骤,让流水线自动完成版本递增和发布:

trigger:
  branches:
    include:
      - main # 替换成你的主分支

pool:
  vmImage: 'ubuntu-latest' # 也可以用windows-latest,看你的项目需求

steps:
# 步骤1:认证Azure Artifacts,避免手动配置凭据
- task: MavenAuthenticate@0
  displayName: '认证Azure Artifacts仓库'
  inputs:
    artifactsFeeds: '你的Azure Artifacts源名称'

# 步骤2:执行版本发布,自动递增补丁号
- task: Maven@3
  displayName: '发布正式版本构件'
  inputs:
    mavenPomFile: 'pom.xml'
    goals: 'release:prepare release:perform'
    options: '-DskipTests -DreleaseVersion=${project.version.replace("-SNAPSHOT", "")}.1 -DdevelopmentVersion=${project.version.replace("-SNAPSHOT", "")}.2-SNAPSHOT'
    publishJUnitResults: false

解释一下:这里的releaseVersion会把1.0-SNAPSHOT转为1.0.1发布,developmentVersion会把pom更新为1.0.2-SNAPSHOT,下次构建就会自动发布1.0.2,以此类推。


方案二:保持pom快照版本,用流水线号作为补丁号

如果不想修改pom里的版本(一直保持1.0-SNAPSHOT),可以用Azure Pipeline的构建号来作为补丁号,每次发布1.0.1、1.0.2...对应流水线的构建ID。

1. 修改pom.xml

只需要配置好发布仓库即可(和方案一的distributionManagement部分一致),不需要额外添加插件。

2. 修改azure-pipelines.yml

添加步骤提取pom版本、生成发布版本,然后构建发布:

trigger:
  branches:
    include:
      - main

pool:
  vmImage: 'ubuntu-latest'

steps:
# 步骤1:认证Azure Artifacts
- task: MavenAuthenticate@0
  displayName: '认证Azure Artifacts仓库'
  inputs:
    artifactsFeeds: '你的Azure Artifacts源名称'

# 步骤2:提取当前pom的版本号
- task: Maven@3
  displayName: '获取当前pom版本'
  inputs:
    mavenPomFile: 'pom.xml'
    goals: 'help:evaluate -Dexpression=project.version -q -DforceStdout'
  name: getPomVersion

# 步骤3:生成正式版本号(去掉SNAPSHOT,加上构建号)
- script: |
    BASE_VERSION=$(echo $(getPomVersion.stdout) | sed 's/-SNAPSHOT//')
    RELEASE_VERSION="$BASE_VERSION.$(Build.BuildId)"
    echo "##vso[task.setvariable variable=releaseVersion]$RELEASE_VERSION"
  displayName: '设置正式版本变量'

# 步骤4:构建并发布指定版本的构件
- task: Maven@3
  displayName: '构建并发布正式版本'
  inputs:
    mavenPomFile: 'pom.xml'
    goals: 'clean deploy -DskipTests'
    options: '-Dproject.version=$(releaseVersion)'

这种方式下,pom一直是1.0-SNAPSHOT,每次发布的版本号由基础版本加流水线构建ID组成,确保每次都是递增的补丁号。


注意事项

  • 方案一需要流水线有Git仓库的提交权限,因为会把pom的版本变更提交回去。
  • 两种方案都要确保Azure Pipeline的服务账号有Azure Artifacts的发布权限。
  • 如果使用方案一,第一次发布后,pom版本会变成1.0.2-SNAPSHOT,下次构建就会发布1.0.2,完全自动递增。

内容的提问来源于stack exchange,提问作者jcm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:02:34