我要在Cloud Build中创建一个非常基本的Node.js应用程序的CI / CD管道,并将其部署到GCP appengine标准。
无秘密的环境变量存储在app.yaml
文件中。但是我当然不想把我的秘密放在那里。实际上,我不想将它们放在任何位置的文件中(无论是否加密),因为该文件最终将出现在AppEngine实例上,并且可以由“不良管理员”“查看”。有很多示例建议对完整的文件(有时甚至是代码)进行加密/解密,但我不想走这条路。
我正在寻找一种在CI / CD管道中设置“在内存中”秘密环境变量的方法。有人吗?
我没有在app.yaml
文件(env_variables)中添加任何秘密-可以正常工作
将加密的机密添加到我的cloudbuild.yaml
文件中(秘密)-没有错误
在构建步骤中添加了secretEnv:,但价值并没有最终体现为app引擎中的process.env。[KEY]
cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/npm'
args: ['install']
dir: "appengine/hello-world/standard"
- name: "gcr.io/cloud-builders/gcloud"
args: ["app", "deploy", "test-app.yaml"]
dir: "appengine/hello-world/standard"
secretEnv: ['API_KEY', 'API_URL']
secrets:
- kmsKeyName: projects/XXXXXXXX/locations/global/keyRings/customintegrations-secrets/cryptoKeys/integration-secrets
secretEnv:
API_KEY: XXQAoHgKKoHBKOURrUU2RqU+ki8XyqmTjz+ns+MEWp5Kx3hQBpgSQgATFQ5yRdW4m1TLNqNRIdHIqVJi8tn8jFrtlHIEouOzNDe/ASlOT0ZQBfl9Rf7xlvOHAa667poBq2hEoMNvOclxUQ==
API_URL: YYQAoHgKKklo08ZsQF+/8M2bmi9nhWEtb6klyY4rNthUhSIhQ8oSQQATFQ5ywKOxaM/TLwGDmvMtCpl/1stXOOK0kgy42yipYbw/J/QZL68bMat1u4H3Hvp/GMbUVIKEb9jwUtN2xvbL
我希望secretEnv: ['API_KEY', 'API_URL']
将使解密的值可在应用程序引擎的代码(process.env.API_KEY
)中访问。
答案 0 :(得分:1)
这里是full tutorial,介绍如何将环境变量安全地存储在云构建(触发器)设置中并将其导入到您的应用中。
基本上有三个步骤:
将环境变量添加到您的构建触发设置之一中的“变量”部分
Screenshot of where to add variables in build triggers
在构建触发器中设置的常规变量必须以下划线(_)开头
配置cloudbuild.yaml
(在代码示例的第二步)以从构建触发器中读取变量,将其设置为env vars,并将所有env vars写入本地.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
完成!现在,您可以通过触发云构建来部署应用程序,并且您的应用程序将可以访问环境变量。