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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:34:01