La marca gcloud app deploy '--appyaml' no parece funcionar
Para Google App Engine, quiero inyectar env_variables
en mi app.yaml
al implementar. En los documentos para gcloud app deploy
, veo que hay una bandera --appyaml
que:
Implementar con un archivo app.yaml específico que reemplazará al definido en DESPLEGABLE.
https://cloud.google.com/sdk/gcloud/reference/app/deploy
Entonces tengo un script de Fabric que lee my app.yaml
, inyecta mis variables env adicionales, escribe este nuevo app.yaml en un archivo temporal y luego se ejecuta gcloud app deploy
. El comando gcloud
termina luciendo así:
gcloud app deploy . --version dev --project myproject --appyaml='/var/folders/1z/qk45g9p934lg75byl8b74xyh0000gn/T/tmpgdjVUG.yaml'
La implementación se realiza correctamente y se carga un nuevo código, sin embargo, mis nuevas variables env no parecen compensarlo.
Si proporciono un valor falso --appyaml
, arroja un error, por lo que parece usar mi entrada.
¿Alguna idea de lo que podría estar haciendo mal?
Respuestas
Lo he probado en AppEngine estándar con una pequeña HelloWorld
modificación en node.JS como esta:
'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;
La muestra muestra variables de entorno como resultado.
De lo que agregué más simple app.yaml
:
runtime: nodejs10
env_variables:
MY_VAR: "my value from app.yaml"
Que en otra ubicación he agregado diferentes yaml
llamados app1.yaml
:
runtime: nodejs12
env_variables:
MY_VAR: "my value from app1.yaml"
Entonces esto está cambiando la versión del nodo y el valor de MY_VAR
.
Según mis pruebas, esto parece funcionar de manera un poco diferente a lo explicado en el documento, al menos lo entiendo de manera diferente.
Es posible usar --appyaml
flag, pero solo cuando no hay ningún app.yaml
archivo en el directorio. Si no lo tiene en el directorio de la aplicación, usando la bandera puede apuntar a diferentes yaml
.
Entonces, cuando estaba tratando de implementar gcloud app deploy --appyaml="/home/vitooh/app1.yaml"
y app.yaml
estaba en el directorio de la aplicación, la aplicación se implementó con él, por lo que la bandera no hace nada. Sin embargo, cuando lo hice sin app.yaml
que funcione la bandera, se cambia el valor de la variable.
En realidad, puede detectarlo justo después de enviar el comando donde se muestra un resumen, justo antes de confirmar la implementación, en un descriptor
valor como este:
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)?
La pregunta es una caja negra sin ningún detalle: "Tengo un fabfile y luego pasan cosas pero pasan mal". Sin embargo, aquí hay un consejo sobre cómo hacer esto un poco más simple sin molestar app.yaml
. app.yaml
puede contener una directiva llamada includes
, que puede hacer referencia a otro archivo yaml, donde puede tener las variables de entorno, por lo que no tiene que tocar el archivo original.
app.yaml:
(...)
includes:
- my_vars.yaml
my_vars.yaml:
env_variables:
MY_VAR: value