L'indicateur gcloud app deploy '--appyaml' ne semble pas fonctionner

Aug 19 2020

Pour Google App Engine, je souhaite injecter env_variablesdans mon app.yamllors du déploiement. Dans la documentation pour gcloud app deploy, je vois qu'il y a le drapeau --appyamlqui va:

Déployez avec un app.yaml spécifique qui remplacera celui défini dans DEPLOYABLE.

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

J'ai donc un script Fabric qui lit my app.yaml, injecte mes variables env supplémentaires, écrit ce nouveau app.yaml dans un fichier temporaire, puis s'exécute gcloud app deploy. La commande pour gcloudfinit par ressembler à ceci:

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

Le déploiement réussit et le nouveau code est téléchargé, mais mes nouvelles variables d'environnement ne semblent pas le compenser.

Si je donne une valeur fausse, --appyamlcela génère une erreur, il semble donc utiliser mon entrée.

Des idées sur ce que je pourrais faire de mal?

Réponses

2 vitooh Aug 19 2020 at 17:09

Je l'ai testé sur AppEngine standard avec une petite HelloWorldmodification dans node.JS comme ceci:

'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;

L'exemple montre les variables d'environnement comme résultat.

Que j'ai ajouté le plus simple app.yaml:

runtime: nodejs10
env_variables:
  MY_VAR: "my value from app.yaml"

Que dans un autre endroit, j'ai ajouté un autre yamlappelé app1.yaml:

runtime: nodejs12
env_variables:
  MY_VAR: "my value from app1.yaml"

Cela change donc la version et la valeur du nœud MY_VAR.

D'après mes tests, cela semble fonctionner un peu différemment de ce qui est expliqué dans la documentation, du moins je le comprends différemment.

Il est possible d'utiliser l' --appyamlindicateur, mais uniquement lorsqu'il n'y a pas de app.yamlfichier dans le répertoire. Si vous ne l'avez pas dans le répertoire de l'application, vous pouvez pointer vers différent en utilisant l'indicateur yaml.

Ainsi, lorsque j'essayais de déployer avec gcloud app deploy --appyaml="/home/vitooh/app1.yaml"et que j'étais app.yamldans le répertoire de l'application, l'application a été déployée avec elle - donc le drapeau ne fait rien. Cependant, lorsque je l'ai fait sans que app.yamlle drapeau fonctionne, la valeur de la variable est modifiée.

En fait, vous pouvez le repérer juste après avoir soumis la commande où un résumé est affiché, juste avant de confirmer le déploiement, avec une descriptorvaleur comme celle-ci:

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

La question est une boîte noire sans aucun détail: "J'ai un fabfile et puis les choses se passent mais elles se passent mal". Cependant, voici une astuce pour faire cela un peu plus simple sans déranger app.yaml. app.yamlpeut contenir une directive appelée includes, qui peut référencer un autre fichier yaml, où vous pouvez avoir les variables d'environnement, vous n'avez donc pas à toucher le fichier d'origine.

app.yaml:

(...)

includes:
  - my_vars.yaml

my_vars.yaml:

env_variables:
    MY_VAR: value