如何通过Bamboo Docker任务用Bitbucket源码版本标记Docker镜像?
解决Bitbucket+Bamboo中用源码版本号作为Docker镜像标签的方案
方法一:从Git标签提取版本号(匹配你打tag的工作流)
因为你是在master分支的提交上打版本标签(比如1.3.0),可以直接从Git标签中提取版本号传递给Bamboo:
- 在Bamboo构建计划中添加Shell脚本任务,放在Docker构建步骤之前:
# 拉取远程仓库所有标签 git fetch --tags # 获取当前提交对应的精确标签(只返回当前HEAD匹配的标签) VERSION=$(git describe --tags --exact-match HEAD 2>/dev/null) # 将版本号写入Bamboo的结果属性文件,供后续步骤调用 echo "bamboo.docker.image.version=$VERSION" >> "${bamboo_build_working_directory}/bamboo-build-results.properties" - 在Docker构建推送步骤中,直接使用该变量:
docker build -t namespace/repository:${bamboo.docker.image.version} . docker push namespace/repository:${bamboo.docker.image.version} - 可选优化:在Bamboo的触发设置中,启用标签触发,设置标签匹配规则(比如
[0-9]+\.[0-9]+\.[0-9]+),这样只有打了版本标签的提交才会触发构建,避免无标签时变量为空的情况。
方法二:从项目版本文件读取(如果版本号维护在源码文件中)
如果你的版本号是写在项目文件里(比如Maven的pom.xml、Node.js的package.json),可以直接读取文件内容:
- 对于Maven项目,添加Shell脚本任务:
VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) echo "bamboo.docker.image.version=$VERSION" >> "${bamboo_build_working_directory}/bamboo-build-results.properties" - 对于Node.js项目,添加Shell脚本任务:
VERSION=$(node -p "require('./package.json').version") echo "bamboo.docker.image.version=$VERSION" >> "${bamboo_build_working_directory}/bamboo-build-results.properties" - 后续Docker步骤同样使用
${bamboo.docker.image.version}作为标签即可。
注意事项
- 确保Bamboo构建代理已安装Git、对应项目的构建工具(Maven/Node.js等),且有拉取Bitbucket仓库的权限。
- 如果需要同时保留构建号作为备用标签,可以在Docker推送时打多个标签:
docker tag namespace/repository:${bamboo.docker.image.version} namespace/repository:${bamboo.buildNumber} docker push namespace/repository:${bamboo.docker.image.version} docker push namespace/repository:${bamboo.buildNumber}
内容的提问来源于stack exchange,提问作者LilacBlue
相关产品推荐
相关产品推荐

