gcloud app deploy '--appyaml' bayrağı çalışmıyor

Aug 19 2020

Google App Engine için, ben enjekte etmek istiyorum env_variablesbenim içine app.yamlüzerine dağıtmak. Belgelerinde , şunları yapacak gcloud app deploybayrak --appyamlolduğunu görüyorum :

DEPLOYABLE'da tanımlananın yerini alacak belirli bir app.yaml ile dağıtın.

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

Bu yüzden, kendimi okuyan app.yaml, fazladan env değişkenlerimi enjekte eden, bu yeni app.yaml dosyasını bir geçici dosyaya yazan ve sonra çalışan bir Fabric betiğim var gcloud app deploy. Şu şekilde gcloudsonuçlanacak komut :

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

Dağıtım başarılı oldu ve yeni kod yüklendi, ancak yeni ortam değişkenlerim bunu uydurmuyor.

Sahte bir değer sağlarsam --appyaml, bir hata atar, bu yüzden girdimi kullanıyor gibi görünür.

Neyi yanlış yapabileceğime dair bir fikrin var mı?

Yanıtlar

2 vitooh Aug 19 2020 at 17:09

Bunu, HelloWorldnode.JS'de küçük değişikliklerle standart AppEngine üzerinde test ettim :

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

Örnek, sonuç olarak ortam değişkenlerini gösteriyor.

En basitini eklediğimden app.yaml:

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

Başka bir yerde daha farklı yamlad ekledim app1.yaml:

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

Yani bu, düğüm sürümünü ve değerini değiştiriyor MY_VAR.

Testlerime göre bu, belgede açıklanandan biraz farklı çalışıyor gibi görünüyor, en azından farklı şekilde anlıyorum.

--appyamlBayrak kullanmak mümkündür , ancak yalnızca app.yamldizinde dosya yokken . Eğer uygulama dizininde yoksa, bayrağı kullanmaktan farklı bir yere işaret edebilirsiniz yaml.

Bu yüzden, ben ile konuşlandırmaya çalışırken gcloud app deploy --appyaml="/home/vitooh/app1.yaml"ve app.yamluygulama dizinindeyken, uygulama onunla birlikte dağıtıldı - bu nedenle bayrak hiçbir şey yapmıyor. Ancak app.yamlbayrak çalışmadan yaptığımda değişken değeri değişiyor.

Aslında bunu, komutu gönderdikten hemen sonra, gösterilen bir özetin olduğu yerde, dağıtımı onaylamadan hemen önce, şu descriptordeğerde görebilirsiniz:

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

Soru, herhangi bir ayrıntı içermeyen bir kara kutu: "Benim bir dosyam var ve sonra işler oluyor ama yanlış oluyor". Bununla birlikte, bununla uğraşmadan biraz daha basit bir şekilde nasıl yapılacağına dair bir ipucu app.yaml. ortam değişkenlerine sahip olabileceğiniz, böylece orijinal dosyaya dokunmanıza gerek kalmayan başka bir yaml dosyasına referans verebilen app.yamladında bir yönerge içerebilir includes.

app.yaml:

(...)

includes:
  - my_vars.yaml

my_vars.yaml:

env_variables:
    MY_VAR: value