Флаг развертывания приложения gcloud '--appyaml' не работает
Что касается Google App Engine, я хочу добавить env_variables
в свой app.yaml
файл после развертывания. В документации для gcloud app deploy
я вижу, что есть флаг --appyaml
, который:
Разверните с конкретным app.yaml, который заменит тот, который определен в DEPLOYABLE.
https://cloud.google.com/sdk/gcloud/reference/app/deploy
Итак, у меня есть сценарий Fabric, который читает мои app.yaml
, вводит мои дополнительные переменные env, записывает этот новый app.yaml во временный файл и затем запускается gcloud app deploy
. Команда to gcloud
выглядит так:
gcloud app deploy . --version dev --project myproject --appyaml='/var/folders/1z/qk45g9p934lg75byl8b74xyh0000gn/T/tmpgdjVUG.yaml'
Развертывание проходит успешно, и новый код загружается, однако мои новые переменные env, похоже, не справляются с этим.
Если я предоставлю фиктивное значение, --appyaml
он выдаст ошибку, поэтому, похоже, он использует мой ввод.
Есть идеи, что я мог делать неправильно?
Ответы
Я тестировал его на стандартном AppEngine с небольшой HelloWorld
модификацией в node.JS, например:
'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