是否可以将 Cloud Build 中的环境变量注入(inject) App Engine 标准环境?
我不想将我的环境变量推送到 app.yaml
或 .env
中的 GitHub。因此,当 Cloud Build 拉取和部署时,它缺少 .env
文件并且服务器无法完成某些请求。
我尽量避免使用 Datastore,因为 Datastore 的异步特性会使代码更加困惑。我尝试使用发现的加密 secret here ,但这似乎不起作用,因为我将 secret 添加到应用程序部署并且它们没有进入部署,所以我认为这不是 Cloud Build 的用例。
我也尝试了教程 here , 将 .env
文件从存储导入 App Engine Standard,但由于 Standard 没有本地存储,我认为它进入了空白。
那么是否可以在不使用 Datastore 或提交 app.yaml
或 .env
的情况下将 .env
注入(inject) App Engine 标准环境改变控制?可能使用 Cloud Build、KMS 或某种类型的存储?
这是我为 cloudbuild.yaml
所做的尝试:
steps:
- name: "gcr.io/cloud-builders/gcloud"
args: ["app", "deploy"]
secretEnv: ['SECRET1', 'SECRET2', 'SECRET3', 'SECRET4', 'SECRET5']
timeout: "1600s"
secrets:
- kmsKeyName: projects/<Project-Name>/locations/global/keyRings/<Key-Ring-Name>/cryptoKeys/<Key-Name>
secretEnv:
SECRET1: <encrypted-key-base64 here>
SECRET2: <encrypted-key-base64 here>
SECRET3: <encrypted-key-base64 here>
SECRET4: <encrypted-key-base64 here>
SECRET5: <encrypted-key-base64 here>
最佳答案
这是一个tutorial关于如何在您的云构建(触发器)设置中安全地存储环境变量并将它们导入您的应用。
基本上分为三个步骤:
将您的环境变量添加到构建触发器设置之一的“变量”部分
Screenshot of where to add variables in build triggers
按照惯例,在构建触发器中设置的变量必须以下划线 (_) 开头
配置
cloudbuild.yaml
(在代码示例的第二步)从构建触发器中读取变量,将它们设置为环境变量,并将所有环境变量写入本地.env 文件将
couldbuild.yaml
(如下)添加到您的项目根目录
steps:
- name: node:10.15.1
entrypoint: npm
args: ["install"]
- name: node:10.15.1
entrypoint: npm
args: ["run", "create-env"]
env:
- 'MY_SECRET_KEY=${_MY_SECRET_KEY}'
- name: "gcr.io/cloud-builders/gcloud"
args: ["app", "deploy"]
timeout: "1600s"
添加create-env
脚本到package.json
"scripts": {
"create-env": "printenv > .env"
},
从 .env 读取环境变量到您的应用程序 (config.js)
安装dotenv包
npm i dotenv -S
将
config.js
添加到您的应用
// Import all env vars from .env file
require('dotenv').config()
export const MY_SECRET_KEY = process.env.MY_SECRET_KEY
console.log(MY_SECRET_KEY) // => Hello
完成!现在您可以通过触发云构建来部署您的应用程序,并且您的应用程序将有权访问环境变量。
关于node.js - 如何在 Google App Engine 标准环境中使用 Google Cloud Build 或其他方法设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52840187/