如何通过Jenkinsfile流水线使用Git提交哈希自动为Docker镜像打标签
核心修复点
- 修正变量引用方式:
environment块定义的全局变量直接使用${tag}调用,不需要额外加var.前缀 - 清理命令返回值:
sh步骤返回的标准输出默认携带末尾换行符,添加.trim()方法去除首尾空白字符,避免Docker标签格式错误 - 修正Git命令参数:获取短提交哈希的参数为
--short(两个短横线),原脚本参数缺少一个横线导致命令执行异常 - 移除冗余的
tail过滤:正常场景下git rev-parse --short=10 HEAD仅返回单行哈希结果,不需要额外用tail过滤行 - 优化重复操作:Docker登录仅需在流水线最开始执行一次即可,无需每个构建阶段重复执行
修复后完整Jenkinsfile
pipeline { agent any environment { // 修正Git命令,添加trim()清理返回值 tag = sh(returnStdout: true, script: "git rev-parse --short=10 HEAD").trim() } stages { stage('Docker login') { steps { withCredentials([usernamePassword(credentialsId: 'common-dockerhub-up', usernameVariable: 'HUB_USER', passwordVariable: 'HUB_PASS')]) { sh "docker login -u ${HUB_USER} -p ${HUB_PASS}" } } } stage('Build core lodestone image') { steps { sh "docker build -f Dockerfile.lodestone -t mirantiseng/lodestone:${tag} ." sh "docker push mirantiseng/lodestone:${tag}" // 可选配置:同时打latest标签推送 // sh "docker tag mirantiseng/lodestone:${tag} mirantiseng/lodestone:latest" // sh "docker push mirantiseng/lodestone:latest" } } stage('Build core lodestone-comment image') { steps { sh "docker build -f Dockerfile -t mirantiseng/lodestone-comment:${tag} ." sh "docker push mirantiseng/lodestone-comment:${tag}" } } stage('Build core lodestone-mover image') { steps { sh "docker build -f Dockerfile.mover -t mirantiseng/lodestone-mover:${tag} ." sh "docker push mirantiseng/lodestone-mover:${tag}" } } } // 可选配置:流水线结束后自动登出Docker post { always { sh "docker logout" } } }
内容的提问来源于stack exchange,提问作者R. Barrett
相关产品推荐
相关产品推荐

