错误:(gcloud.run.deploy)参数 --set-env-vars:dict arg 语法错误

问题描述 投票:0回答:4

我正在使用 Cloud Code(Visual Studio Code 的扩展),并且在 deploy 期间,通过 UI,我尝试设置 Environment Variables 字段,如下所示:

KEY1:value1
KEY2:value2,value3

但是我遇到了这个错误:

部署应用程序失败。错误:错误:(gcloud.run.deploy)参数 --set-env-vars:dict arg 语法错误:[value3]。有关提供带有特殊字符的列表或字典标志值的信息,请参阅

gcloud topic flags-file
gcloud topic escaping
。 ,用法: gcloud run deploy [[SERVICE] --namespace=NAMESPACE] [可选标志] 可选标志可以是 --add-cloudsql-instances | --允许未经身份验证| --args | --异步| --二进制授权 | --碎玻璃| --清除二进制授权 | --clear-cloudsql-instances | --clear-cloudsql-instances | --clear-config-maps | --clear-config-maps | --clear-env-vars | --clear-env-vars | --清除键 | --清除标签 | --清除后密钥撤销操作类型 | --清除秘密 | --clear-vpc-连接器 | --集群| --集群位置 | --命令| --并发 | --连接性| --上下文| --CPU | --cpu 节流 | --env-vars-文件 | --帮助| --图像| --入口 | --键| --kubeconfig | --标签 | --最大实例数 | --记忆| --最小实例数 | --命名空间| --平台| --端口| --后密钥撤销操作类型--地区| --remove-cloudsql-instances | --删除-cloudsql-instances --remove-config-maps | --remove-config-maps | --remove-env-vars | --删除-env-vars | --删除标签 | --删除秘密 | --修订后缀 | --服务帐户 | --set-cloudsql-instances | --set-cloudsql-instances | --set-config-maps | --set-config-maps | --set-env-vars | --set-env-vars | --设置秘密 | --来源| --标签| --超时| --无交通 | --更新配置地图 | --更新环境变量 | --更新标签 | --更新秘密 | --使用-http2 | --vpc 连接器 | --vpc-egress 有关此命令及其标志的详细信息,请运行:gcloud run deploy --help

所以看来逗号需要转义。请问如何通过 Cloud Code UI 做到这一点?

visual-studio-code google-cloud-platform gcloud google-cloud-run google-cloud-code
4个回答
4
投票

如果您将 env-var 设置为如下所示:

--set-env-var "A=B,C,D"
到 gcloud,它会将逗号 (,) 字符视为另一个环境变量声明,并尝试将值拆分为多个环境变量。 这里详细解释了这一点。

但是,为了防止用逗号分割,您需要指定一个确定不会出现在值字符串中的不同自定义分隔符,例如 ##:

--set-env-vars "^##^A=B,C,D"

您也可以使用官方文档中提到的格式:

--set-env-vars "^@^KEY1=value1,value2,value3@KEY2=..."

1
投票

我认为这里没有解决办法。 我们正在努力通过 https://github.com/GoogleCloudPlatform/cloud-code-vscode/issues/560 来解决此问题。


0
投票

现在,我可以通过创建“环境变量”UI 字段

empty
并使用
Dockerfile
来设置变量来解决这个问题,此语法在此起作用:

ENV KEY1='value1'
ENV KEY2='value2,value3'

0
投票

如前所述,在使用 --set-env-vars 或 --update-env-vars 命令时在环境变量的值之间放置逗号将被解释为声明新的环境变量 (https://cloud. google.com/sdk/gcloud/reference/topic/escaping)。

我发现的一个解决方法是将逗号替换为另一个标点符号/分隔符,例如分号,然后使我的代码适应这个新的分隔符:

--set-env-vars KEY="val1;val2;val3"

然后我将我的 Python 代码更新为如下所示:

env_var = os.environ.get('KEY')
env_var_values = env_var.split(';') #instead of env_var.split(',')
© www.soinside.com 2019 - 2024. All rights reserved.