Флаг развертывания приложения gcloud '--appyaml' не работает

Aug 19 2020

Что касается 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он выдаст ошибку, поэтому, похоже, он использует мой ввод.

Есть идеи, что я мог делать неправильно?

Ответы

2 vitooh Aug 19 2020 at 17:09

Я тестировал его на стандартном 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)?
1 yedpodtrzitko Aug 19 2020 at 18:48

Вопрос - черный ящик без каких-либо подробностей: «У меня есть fabfile, а потом что-то случается, но происходит что-то не так». Однако вот совет, как сделать это немного проще, не беспокоясь app.yaml. app.yamlможет содержать директиву с именем includes, которая может ссылаться на другой файл yaml, где вы можете иметь переменные среды, поэтому вам не нужно прикасаться к исходному файлу.

app.yaml:

(...)

includes:
  - my_vars.yaml

my_vars.yaml:

env_variables:
    MY_VAR: value