gcloud应用程序部署'--appyaml'标志似乎不起作用

问题描述

对于Google App Engine,我想在部署后将env_variables注入我的app.yaml中。在gcloud app deploy的文档中,我看到有标记--appyaml将:

使用特定的app.yaml进行部署,它将替换DEPLOYABLE中定义的app.yaml。

https://cloud.google.com/sdk/gcloud/reference/app/deploy

因此,我有一个Fabric脚本,该脚本读取我的app.yaml,注入我的额外env变量,将此新app.yaml写入临时文件,然后运行gcloud app deploygcloud的命令最终看起来像这样:

gcloud app deploy . --version dev --project myproject --appyaml='/var/folders/1z/qk45g9p934lg75byl8b74xyh0000gn/T/tmpgdjVUG.yaml'

部署成功并且上传了新代码,但是我的新env变量似乎没有弥补。

如果我为--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)?
,

问题是一个没有任何细节的黑匣子:“我有一个fabfile,然后事情发生了,但它们发生了错误”。但是,这里有个技巧,如何在不弄乱app.yaml的情况下使此操作更简单。 app.yaml可以包含一个名为includes的指令,该指令可以引用另一个yaml文件,您可以在其中拥有环境变量,因此您不必触摸原始文件。

app.yaml:

(...)

includes:
  - my_vars.yaml

my_vars.yaml:

env_variables:
    MY_VAR: value

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...