如何在Bamboo中使用pom版本号结合构建编号创建Git标签
Bamboo 配置Maven项目自动打Git版本标签实现方法
核心实现思路
你已经拿到了Bamboo内置构建号变量,只需要把pom.xml里的项目版本号提取为Bamboo可识别的自定义变量,再按规则拼接即可,不要用正则硬解析pom文件,容易匹配错parent、依赖里的version字段,下面是两种可直接落地的方案。
方案1:原生Maven命令提取版本(无额外插件,推荐)
这个方案用Maven官方提供的取值命令,准确率最高,适配所有标准Maven项目:
在源码检出任务之后、Maven构建任务之前,新增一个脚本任务,根据构建代理的操作系统选对应脚本:
- Linux/macOS 代理执行:
# 静默提取当前项目的version值 POM_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) # 注入为Bamboo全局可用变量,后续所有任务都能通过${bamboo.pom.version}调用 echo "pom.version=${POM_VERSION}" >> ${bamboo.injectVariablesFile}- Windows 批处理代理执行:
@echo off for /f "delims=" %%i in ('mvn help:evaluate -Dexpression=project.version -q -DforceStdout') do set POM_VERSION=%%i echo pom.version=%POM_VERSION% >> %bamboo.injectVariablesFile%注意:脚本执行路径默认就是Bamboo检出源码的项目根目录,和pom.xml同路径,不需要额外切换目录,提前确认构建代理已经配置好可用的Maven环境即可。
配置打标签环节:
不管你用Bamboo自带的「Git 推送标签」内置任务,还是自己写脚本执行git tag、git push命令,标签名直接按规则拼接变量即可:${bamboo.pom.version}.${bamboo.buildNumber}最终生成的标签就是你要的
1.0.1.53格式。
方案2:Maven构建环节直接透传标签值
如果不想额外加脚本任务,可以直接在Maven构建时把拼接好的标签值写入Bamboo变量:
- 在原有Maven构建任务的「目标」栏,追加参数把拼接好的标签值写入构建属性:
clean deploy -Dbamboo.build.tag=${project.version}.${bamboo.buildNumber} - 把Maven任务的变量作用域设置为「跨任务可用」,后续打标签任务直接读取
${bamboo.build.tag}即可,不需要额外做版本提取。
常见问题处理
- 如果你的项目版本带
-SNAPSHOT后缀,打出来的标签会是1.0.1-SNAPSHOT.53格式,需要去掉后缀的话,在Linux脚本里加一行替换逻辑就行:POM_VERSION=${POM_VERSION/-SNAPSHOT/} - 提前确认Bamboo配置的Git凭据有仓库推送权限,不然标签只会在本地构建机生成,无法推送到远端仓库。
- 多模块项目不要在子模块目录执行取值命令,要在根pom所在目录执行,否则拿到的是子模块的版本号。
内容的提问来源于stack exchange,提问作者Peter L
相关产品推荐
相关产品推荐

