对于 Google App Engine,我想在部署时将 env_variables
注入(inject)到我的 app.yaml
中。在 gcloud app deploy
的文档中,我看到有一个 --appyaml
标志,它将:
Deploy with a specific app.yaml that will replace the one defined in the DEPLOYABLE.
https://cloud.google.com/sdk/gcloud/reference/app/deploy
所以我有一个 Fabric 脚本,它读取我的 app.yaml
,注入(inject)额外的环境变量,将这个新的 app.yaml 写入临时文件,然后运行 gcloud app deploy
. gcloud
的命令最终如下所示:
gcloud 应用程序部署 。 --version dev --project myproject --appyaml='/var/folders/1z/qk45g9p934lg75byl8b74xyh0000gn/T/tmpgdjVUG.yaml'
部署成功并且新代码已上传,但是我的新环境变量似乎无法弥补。
如果我向 --appyaml
提供虚假值,则会引发错误,因此它似乎确实使用了我的输入。
你知道我可能做错了什么吗?
最佳答案
我已经在标准 AppEngine 上对其进行了测试,并在 Node.JS 中进行了小的 HelloWorld
修改,如下所示:
'use strict';
const express = require('express');
const app = express();
app.get('/', (req, res) => {
var my_respond = "variables: ";
res.status(200).send(Object.entries(process.env)).end();
});
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`App listening on port ${PORT}`);
console.log('Press Ctrl+C to quit.');
});
module.exports = app;
示例显示环境变量作为结果。
比我添加的最简单的app.yaml
:
runtime: nodejs10
env_variables:
MY_VAR: "my value from app.yaml"
与其他位置相比,我添加了不同的 yaml
,称为 app1.yaml
:
runtime: nodejs12
env_variables:
MY_VAR: "my value from app1.yaml"
因此,这正在更改 MY_VAR
的节点版本和值。
根据我的测试,这似乎与文档中解释的有点不同,至少我对它的理解不同。
可以使用 --appyaml
标志,但前提是目录中没有 app.yaml
文件。如果您的应用程序目录中没有它,那么您可以使用该标志指向不同的 yaml
。
因此,当我尝试使用 gcloud app deploy --appyaml="/home/vitooh/app1.yaml"
进行部署时,app.yaml
位于应用程序目录中,应用程序是随它一起部署的 - 因此该标志不会执行任何操作。但是,当我在没有 app.yaml
的情况下完成此操作时,该标志有效,变量值发生了更改。
实际上,您可以在提交命令后发现它,在确认部署之前,在 descriptor
值中显示摘要,如下所示:
descriptor: [/home/vitooh/app1.yaml]
source: [/home/vitooh/appEngine/nodejs-docs-samples/appengine/hello-world/standard]
target project: [xxxxx-test-01]
target service: [default]
target version: [20200819t094956]
target url: [https://xxxxx-test-01.appspot.com]
Do you want to continue (Y/n)?
关于google-app-engine - gcloud 应用程序部署 '--appyaml' 标志似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63476841/