如何在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
相关产品推荐
相关产品推荐

