node.js - 如何在 Google App Engine 标准环境中使用 Google Cloud Build 或其他方法设置环境变量?

标签 node.js google-app-engine google-cloud-platform google-cloud-build

是否可以将 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关于如何在您的云构建(触发器)设置中安全地存储环境变量并将它们导入您的应用。

基本上分为三个步骤:

  1. 将您的环境变量添加到构建触发器设置之一的“变量”部分

    Screenshot of where to add variables in build triggers

    按照惯例,在构建触发器中设置的变量必须以下划线 (_) 开头

  2. 配置 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"
},

  1. 从 .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/

相关文章:

google-app-engine - 在 ndb tasklet 中使用 images.get_serving_url_async() 是否安全?

javascript - Firebase:如何调用 https.onCall 函数 node.js?

google-cloud-platform - NEG 未附加到任何具有健康检查功能的 BackendService

mysql - 鬼博客的sqlite vs mysql?

google-app-engine - 没有处理程序匹配此 URL -- URL 指向 GWT 文件

javascript - C#版本的javascript函数btoa

node.js - 在 Node.JS 应用程序的应用程序配置中找不到 URLMap 条目

java - MongoDB 主机名/URI 配置

angularjs - 构建 AngularJS 模板时 gulp 注释错误

javascript - 如何将 MongooseArray.prototype.pull() 与 typescript 一起使用?