如何将系统环境变量传递给app.yaml?

时间:2019-01-11 02:49:02

标签: google-app-engine google-cloud-platform

有可能吗?这是我的app.yaml

runtime: nodejs8
env_variables:
  NODE_ENV: production
  PORT: 8080
  API_KEY: ${API_KEY}

${API_KEY}就像一个占位符。

当我运行API_KEY=xdfj212c gcloud app deploy app.yaml命令时,我想将API_KEY=xdfj212c传递给app.yaml并将占位符替换为 xdfj212c

预期结果:

runtime: nodejs8
env_variables:
  NODE_ENV: production
  PORT: 8080
  API_KEY: xdfj212c

或者,当我运行

  1. export API_KEY=xdfj212c

  2. gcloud app deploy

我想要相同的行为。

这对Google App Engine部署工作流程有意义吗?

2 个答案:

答案 0 :(得分:1)

app.yaml中,您可以include另一个YAML配置

includes:
- extra_env_vars.yaml

您可以在插入environment variables

时动态创建的
# Unix-like OS
export DB_PASSWORD=your_password
export DB_HOST=your_host
echo -e "env_variables:\n    DB_PASSWORD: $DB_PASSWORD\n    DB_HOST: $DB_HOST" > extra_env_vars.yaml

# Windows
set DB_PASSWORD=your_password
set DB_HOST=your_host
(echo env_variables: & echo.    DB_PASSWORD: %DB_PASSWORD% & echo.    DB_HOST: %DB_HOST%) > extra_env_vars.yaml

生成的extra_env_vars.yaml如下所示:

env_variables: 
    DB_PASSWORD: your_password 
    DB_HOST: your_host

最后,在版本控制系统中忽略extra_env_vars.yaml

答案 1 :(得分:0)

您始终可以使用“ sed”:

.blur {
    transition: all .5s ease;
    filter: blur(3px);
}

'坏'的事情是,这会将密钥存储回去,但是您始终可以追加一个新的'sed'命令以再次用占位符替换密钥,或者使用VCS机制仅重置更改文件。 / p>

另一个选择是将“ app.yaml”文件另存为“ app_template.yaml”,然后针对您的部署执行此操作:

$ sed -i 's/${API_KEY}/xdfj212c/g' app.yaml && gcloud app deploy

这将在新文件“ app.yaml”中进行替换,然后进行部署。