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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.12 16:15:51