Bash Deployment.yaml模板文件字符串替换为sed,所有与env var$匹配的模式;模式>;

Bash Deployment.yaml模板文件字符串替换为sed,所有与env var$匹配的模式;模式>;,bash,kubernetes,sed,google-cloud-build,Bash,Kubernetes,Sed,Google Cloud Build,我有一个kubernetes部署模板,如下所示 […其他东西…] 数据: 环境变量1:\u环境变量1 环境变量2:\u环境变量2 环境变量等:环境变量等 我想指示我的cloudbuild.yaml将出现的_SOME\u THING替换为环境变量$\u SOME\u THING的实际值。我知道我可以执行Bash命令,所以我尝试了使用sed: #\x27是角色的 入口点:“bash” args: -“-eEuo” -“管道失效” -“-c” - |- sed-n的%\([A-Z][A-Z\u 0-

我有一个kubernetes部署模板,如下所示

[…其他东西…]
数据:
环境变量1:\u环境变量1
环境变量2:\u环境变量2
环境变量等:环境变量等
我想指示我的
cloudbuild.yaml
将出现的_SOME\u THING替换为环境变量
$\u SOME\u THING
的实际值。我知道我可以执行Bash命令,所以我尝试了使用sed:

#\x27是角色的
入口点:“bash”
args:
-“-eEuo”
-“管道失效”
-“-c”
- |-
sed-n的%\([A-Z][A-Z\u 0-9]*\):[[:空格:]*.\u1[[:空格:]*$%sed-i\
\x27s_\1[[:空格:]*$\x27\$\u1\x27;g\x27$\u K8S\u YAML\u文件%gp'\
$\u K8S\u YAML\u文件| sh
其思想是为每个变量生成一个替换命令,然后将它们传输到shell。生成的命令看起来不错:

sed-i_环境变量1[:空格:]*$;'$_环境变量1';g'$\U K8S\U YAML\U文件
sed-i's_环境变量2[:空格:]*$;'$_环境变量2';g'$\U K8S\U YAML\U文件
sed-i's_环境变量等[:空格:]*$;'$_环境变量等;g'$\U K8S\U YAML\U文件
在使用
export
设置env变量后,当我在git bash中执行它时,整个过程都会起作用,但是当通过cloudbuild.yaml执行它时,文件被修改如下:

[…其他东西…]
数据:
环境变量1:1
环境变量2:1
环境变量等:1

我想我错过了一些转义,或者传递给bash(-eEuo)的命令行选项把事情搞砸了,但是我没有任何线索。任何解决方案,即使不使用sed来完成任务(但不需要安装额外的工具),都将不胜感激。谢谢。

我得出的结论是,我试图实现的目标是不可能的。如上所述,通过cloudbuild启动shell并尝试打印出env变量(通过
printenv
)和shell变量(
set-o posix;set
)不会显示任何设置为触发器替换的my变量。据我所知,这实际上可能是名称所说的,即在处理实际文件之前对其执行的字符串替换。如果不直接将这些引用写入文件中,我就无法提取这些引用的价值。任何建立参考然后对其进行评估的策略都失败了。我采用的最后一个解决方案是envsubstcloudbuilder(),它将每个变量从文件传播到shell(
env:[''我的变量=$我的变量',…])

经过一些修补,我设法用空字符串替换了所有占位符。我是否需要导出变量以使其在sh中可用?这不是由bash-c完成的吗?