GCP Cloud Build构建报错:$SHORT_SHA替换变量为空致镜像标签无效
问题成因
$SHORT_SHA是GCP Cloud Build的内置替换变量,仅当构建由关联代码托管源(Cloud Source Repositories、GitHub、Bitbucket等)的触发器自动启动时,才会被自动赋值为触发本次构建的代码提交记录的前7位Commit Hash。- 本地直接执行
gcloud builds submit命令上传本地源码触发构建时,Cloud Build无法关联到远程代码仓库的提交记录,不会自动给$SHORT_SHA赋值,变量最终解析为空字符串,拼接后生成的Docker镜像标签为xxx/diabetes-prediction-api:,不符合Docker镜像标签的格式规范,直接触发invalid reference format报错。
解决方案
你可以根据自己的使用场景选以下任意一种方案修复:
方案1:本地提交时手动传入SHORT_SHA值(适配本地调试场景)
执行提交命令时通过--substitutions参数手动给变量赋值,如果本地是Git仓库,可以直接取当前仓库的短Commit ID作为标签值,和触发器自动构建的行为保持一致:gcloud builds submit --substitutions=SHORT_SHA=$(git rev-parse --short HEAD)如果本地不是Git环境,也可以传入自定义的版本标识,比如:
gcloud builds submit --substitutions=SHORT_SHA=local-test-v1方案2:配置变量默认兜底值(兼容本地提交和触发器构建两种场景)
修改cloudbuild.yaml配置,在文件最外层添加substitutions配置段给$SHORT_SHA设置默认值,就算本地提交时没传参也不会出现空值:steps: # Docker Build - name: 'gcr.io/cloud-builders/docker' args: - 'build' - '-t' - 'us-central1-docker.pkg.dev/$PROJECT_ID/diabetes-prediction/diabetes-prediction-api:$SHORT_SHA' - '-f' - 'src/serving/Dockerfile' - '.' # 新增替换变量默认配置 substitutions: SHORT_SHA: local-build-default注意:如果是代码仓库触发器启动构建,自动注入的
SHORT_SHA值会覆盖这个默认值,不影响正常CI流程。方案3:换用本地提交场景下自动赋值的内置变量
如果你不需要用Git Commit ID作为镜像标签,可以直接替换为Cloud Build在所有构建场景下都会自动赋值的内置变量$BUILD_ID(每次构建生成的全局唯一ID),不需要额外传参或者修改配置:# 把镜像标签里的$SHORT_SHA替换为$BUILD_ID即可 - 'us-central1-docker.pkg.dev/$PROJECT_ID/diabetes-prediction/diabetes-prediction-api:$BUILD_ID'
内容的提问来源于stack exchange,提问作者mon
相关产品推荐
相关产品推荐

