如何在新 shell 中保留现有环境变量

How to retain existing env variables in a new shell

我知道我一定是在做一些愚蠢的事情,但我正在尝试将环境变量传递给 Cloud Build 中 /bin/sh -c 下的 运行 命令。

我的 Cloud Build 文件如下所示:

 - id: db-migrate
  name: node:16.13.0
  dir: 'packages/backend'
  entrypoint: '/bin/sh'
  args: 
 - '-c'
 - '(/workspace/cloud_sql_proxy -dir=/workspace -instances=$_DB_CONNECTION=tcp:127.0.0.1:5432 & sleep 2) && yarn db:migrate'
  env:
 - 'DB_HOST=127.0.0.1'
 - 'DB_USER=$_DB_USER'
 - 'DB_PASSWORD=$_DB_PASSWORD'
 - 'DB_NAME=$_DATABASE'

我的 Cloud Build Trigger 设置了替换,当我查看构建详细信息时,它显示环境变量已设置。

但是命令 yarn db:migrate 就像没有设置环境变量一样。我相信这是因为它们没有从机器传递到命令。

知道我做错了什么吗?

这里的问题是,当我们调用 bin/sh 时,它会创建一个新的 shell,并带有它自己的环境变量。当我通读 SH/Dash 上的手册时,我将把这个问题留在这里: 如何在新 shell 中保留现有环境变量?

好的,我明白了。

我们使用的是 TypeORM,最初使用的是 ormconfig.json 文件。事实证明,这仍然以某种方式在系统上被拾取并且正在覆盖所有环境变量。

发布此回复以帮助其他人以防他们犯同样的错误。