GitLab新建Tag时如何自动修改POM文件中的version值为指定版本
实现步骤
核心通过GitLab CI/CD流水线监听Tag创建事件,触发时自动修改pom版本并提交回仓库,全程无需人工干预。
1. 前置权限配置
打开项目的GitLab设置页,进入「CI/CD > 通用流水线」板块,开启Allow pipelines to push to the repository权限,保证流水线执行完修改后有权限把变更提交回仓库。
如果项目配置了保护Tag规则,需要把CI运行使用的账号加入保护Tag的允许推送列表,避免提交被拦截。
2. 编写CI流水线配置
在项目根目录新建.gitlab-ci.yml文件,写入以下配置:
stages: - update-version update_pom_version: stage: update-version # 匹配项目使用的JDK8版本 image: maven:3.6.3-jdk-8 # 仅在新建/推送Tag时触发任务 only: - tags variables: # 关闭浅克隆,保证可以正常提交推送代码 GIT_DEPTH: 0 script: # 配置git提交身份 - git config --global user.name "GitLab CI Bot" - git config --global user.email "ci-bot@noreply.com" # 用maven官方插件修改pom版本,不会误改parent依赖的版本号 - mvn versions:set -DnewVersion=test-SNAPSHOT -DgenerateBackupPom=false # 提交变更并推送到仓库 - git add pom.xml - git commit -m "chore: auto update pom version to test-SNAPSHOT triggered by tag $CI_COMMIT_TAG" || echo "No version changes need to commit" - git push origin HEAD:${CI_COMMIT_BRANCH}
配置说明
mvn versions:set是maven官方提供的版本修改命令,会精准定位项目自身的<version>标签,不会误改parent的Spring Boot版本,比正则替换更稳定- 追加
|| echo "No version changes need to commit"是为了避免pom版本已经是test-SNAPSHOT时,commit步骤报错导致流水线失败 - 如果不需要把修改提交回仓库,只是在Tag触发的构建流程里使用test-SNAPSHOT版本,可以删掉git配置、提交、推送相关的脚本,执行完versions:set命令后直接跑后续构建打包步骤即可
如果不想依赖maven插件,也可以用sed命令直接替换,对应脚本为
sed -i '/<artifactId>north-resource-sync<\/artifactId>/{n;s/<version>.*<\/version>/<version>test-SNAPSHOT<\/version>/}' pom.xml,这个命令会先匹配你项目的artifactId行,再替换下一行的version值,也不会误改parent版本。
内容的提问来源于stack exchange,提问作者zhangliang
相关产品推荐
相关产品推荐

