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

GCP Cloud Build配置变量在Python脚本中返回空值问题排查

问题原因与解决方案

你的问题出在变量传递方式不匹配:Cloud Build YAML里是把substitutions变量作为命令行参数传给Python脚本,但你的Python代码却在尝试读取环境变量,两者逻辑不对应,所以拿不到正确的值。

修正步骤

首先修复Cloud Build YAML的格式错误

你提供的YAML存在语法问题,steps后缺少冒号,args缩进不正确,正确格式如下:

steps:
- name: 'python:3.9'  # 指定Python镜像,确保运行环境正确
  args:
  - 'python3'
  - 'test.py'
  - '--project=${_PROJECT_ID}'
  - '--dataset=${_DATASET_ID}'
  - '--table=${_TABLE_NAME}'

substitutions:
  _PROJECT_ID: 'test1det'
  _DATASET_ID: 'testdataset'
  _TABLE_NAME: 'testtable'

方案一:Python脚本解析命令行参数(推荐)

既然YAML里是通过命令行参数传递变量,Python需要用参数解析库(比如argparse)来读取这些值:

import argparse

def tst(project_id, dataset_id, table_name):
    # 这里编写你的业务逻辑
    print(f"项目ID: {project_id}, 数据集ID: {dataset_id}, 表名: {table_name}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument('--project', required=True, help='GCP项目ID')
    parser.add_argument('--dataset', required=True, help='BigQuery数据集ID')
    parser.add_argument('--table', required=True, help='BigQuery表名')
    args = parser.parse_args()
    
    tst(args.project, args.dataset, args.table)

方案二:将substitutions变量设为环境变量

如果你坚持用os.getenv读取环境变量,可以在Cloud Build步骤中直接设置环境变量:

修改后的Cloud Build YAML

steps:
- name: 'python:3.9'
  env:
  - 'PROJECT_ID=${_PROJECT_ID}'
  - 'DATASET_ID=${_DATASET_ID}'
  - 'TABLE_NAME=${_TABLE_NAME}'
  args:
  - 'python3'
  - 'test.py'

substitutions:
  _PROJECT_ID: 'test1det'
  _DATASET_ID: 'testdataset'
  _TABLE_NAME: 'testtable'

对应的Python代码

import os

def tst(
    project_id: str=os.getenv('PROJECT_ID', 'default_project_id'),
    dataset_id: str=os.getenv('DATASET_ID', 'default_dataset_id'),
    table_name: str=os.getenv('TABLE_NAME', 'default_table_name')
):
    # 业务逻辑
    print(f"项目ID: {project_id}, 数据集ID: {dataset_id}, 表名: {table_name}")

if __name__ == "__main__":
    tst()

内容的提问来源于stack exchange,提问作者lisa_rao007

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:52:16