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

如何正确将Google Cloud Build替换项传递至Google Cloud Run环境变量?

解决Cloud Build Substitutions注入Cloud Run环境变量的问题

你的核心问题是混淆了Cloud Build步骤容器的环境变量和Cloud Run服务的环境变量:当前写法里env字段设置的变量仅作用于执行部署步骤的bash容器,并不会自动传递给Cloud Run服务。要实现需求,需通过gcloud run deploy的--set-env-vars参数显式传递。

正确实现示例

修改后的cloudbuild.yaml如下:

steps:
  - name: 'gcr.io/kaniko-project/executor:latest'
    id: 'Build & Push Image'
    args:
      - '--destination=us.gcr.io/$PROJECT_ID/$_IMAGE_NAME:$SHORT_SHA'
      - '--destination=us.gcr.io/$PROJECT_ID/$_IMAGE_NAME:latest'
      - '--dockerfile=Dockerfile'
      - '--context=.'
      - '--cache=true'
      - '--cache-ttl=120h'

  - id: 'Deploy to Cloud Run'
    name: 'gcr.io/cloud-builders/gcloud'
    args:
      - 'run'
      - 'deploy'
      - '$_SERVICE_NAME'
      - '--image=us.gcr.io/$PROJECT_ID/$_IMAGE_NAME:$SHORT_SHA'
      - '--region=$_REGION'
      - '--platform=managed'
      - '--allow-unauthenticated'
      - '--port=8983'
      # 用--set-env-vars传递环境变量给Cloud Run
      - '--set-env-vars=API_VERSION_LATEST="v1"'
      - '--set-env-vars=ASCOM_ALPACA_API_DEVICE_ID=$_DEVICE_ID'
      - '--set-env-vars=ASCOM_ALPACA_API_BASE_URL=$_BASE_URL'
      - '--set-env-vars=ASCOM_ALPACA_API_IP_ADDRESS=$_IP_ADDRESS'
      - '--set-env-vars=PLEIADES_API_KEY=$_API_KEY'
      - '--set-env-vars=TAILSCALE_HOST_NAME=$_TAILSCALE_HOST_NAME'
      - '--set-env-vars=TAILSCALE_EPHEMERAL_AUTH_KEY=$_TAILSCALE_EPHEMERAL_AUTH_KEY'

substitutions:
  _IMAGE_NAME: your-default-image-name
  _SERVICE_NAME: your-default-service-name
  _REGION: us-central1
  # 可设置自定义替换变量的默认值,触发器中可覆盖
  _DEVICE_ID: default-device-id
  _BASE_URL: default-base-url
  _IP_ADDRESS: default-ip
  _API_KEY: default-api-key
  _TAILSCALE_HOST_NAME: default-host
  _TAILSCALE_EPHEMERAL_AUTH_KEY: default-key

options:
  logging: CLOUD_LOGGING_ONLY

关键说明

  1. 区分两类环境变量:

    • Cloud Build步骤的env字段:仅给执行该步骤的容器(如bash)设置变量,和Cloud Run服务无关。
    • --set-env-vars参数:专门用于定义Cloud Run服务运行时的环境变量,是传递substitution值的正确途径。
  2. 批量简化写法:
    若变量较多,可将多个环境变量合并到一个--set-env-vars参数中,用逗号分隔:

    - '--set-env-vars=API_VERSION_LATEST="v1",ASCOM_ALPACA_API_DEVICE_ID=$_DEVICE_ID,ASCOM_ALPACA_API_BASE_URL=$_BASE_URL'
    
  3. Substitution复用技巧:
    在substitutions块中设置自定义变量的默认值,后续创建Cloud Build触发器时,可针对不同服务覆盖这些值,实现触发器的跨服务复用。

  4. 变量规则:

    • 自定义替换变量必须以_开头(如_IMAGE_NAME),内置变量(如$PROJECT_ID、$SHORT_SHA)直接引用即可。
    • 变量名大小写敏感,需确保触发器配置与yaml中的变量名完全一致。

内容的提问来源于stack exchange,提问作者Micheal J. Roberts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:15:37