L'indicateur gcloud app deploy '--appyaml' ne semble pas fonctionner
Pour Google App Engine, je souhaite injecter env_variables
dans mon app.yaml
lors du déploiement. Dans la documentation pour gcloud app deploy
, je vois qu'il y a le drapeau --appyaml
qui 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 gcloud
finit 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, --appyaml
cela 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
Je l'ai testé sur AppEngine standard avec une petite HelloWorld
modification 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 yaml
appelé 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' --appyaml
indicateur, mais uniquement lorsqu'il n'y a pas de app.yaml
fichier 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.yaml
dans 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.yaml
le 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 descriptor
valeur 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)?
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.yaml
peut 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