Bendera gcloud app deploy '--appyaml' tampaknya tidak berfungsi

Aug 19 2020

Untuk Google App Engine, saya ingin memasukkannya env_variableske dalam aplikasi saya app.yaml. Di dokumen untuk gcloud app deploy, saya melihat ada bendera --appyamlyang akan:

Deploy dengan app.yaml tertentu yang akan menggantikan yang ditentukan di DEPLOYABLE.

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

Jadi saya memiliki skrip Fabric yang membaca my app.yaml, menyuntikkan variabel env ekstra saya, menulis app.yaml baru ini ke tempfile, dan kemudian berjalan gcloud app deploy. Perintah untuk gcloudakhirnya terlihat seperti ini:

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

Penerapan berhasil dan kode baru diupload, namun variabel env baru saya tampaknya tidak berhasil.

Jika saya memberikan nilai palsu --appyamlmaka itu akan membuat kesalahan, jadi sepertinya itu menggunakan masukan saya.

Ada ide apa yang bisa saya lakukan salah?

Jawaban

2 vitooh Aug 19 2020 at 17:09

Saya telah mengujinya di AppEngine standar dengan HelloWorldmodifikasi kecil di node.JS seperti ini:

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

Sampel menunjukkan variabel lingkungan sebagai hasil.

Dari yang saya tambahkan paling sederhana app.yaml:

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

Dari pada di lokasi lain saya telah menambahkan yang berbeda yang yamldisebut app1.yaml:

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

Jadi ini mengubah versi dan nilai node MY_VAR.

Menurut pengujian saya ini tampaknya bekerja sedikit berbeda dari yang dijelaskan di dokumen, setidaknya saya memahaminya secara berbeda.

--appyamlBendera dapat digunakan , tetapi hanya jika tidak ada app.yamlfile di direktori. Jika Anda tidak memilikinya di direktori aplikasi, daripada menggunakan bendera Anda bisa menunjuk ke berbeda yaml.

Jadi ketika saya mencoba menerapkan gcloud app deploy --appyaml="/home/vitooh/app1.yaml"dan app.yamlberada di direktori aplikasi, aplikasi itu diterapkan dengannya - jadi panji tidak melakukan apa pun. Namun ketika saya melakukannya tanpa app.yamlbendera berfungsi, nilai variabel berubah.

Sebenarnya Anda dapat melihatnya tepat setelah mengirimkan perintah di mana ada ringkasan yang ditampilkan, tepat sebelum Anda mengonfirmasi penerapan, dalam descriptornilai seperti ini:

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

Pertanyaannya adalah kotak hitam tanpa detail apa pun: "Saya memiliki file hebat dan kemudian terjadi sesuatu tetapi terjadi salah". Namun, berikut tip bagaimana melakukan ini sedikit lebih sederhana tanpa mengotak-atik app.yaml. app.yamldapat berisi perintah yang disebut includes, yang dapat mereferensikan file yaml lain, di mana Anda dapat memiliki variabel lingkungan, sehingga Anda tidak perlu menyentuh file aslinya.

app.yaml:

(...)

includes:
  - my_vars.yaml

my_vars.yaml:

env_variables:
    MY_VAR: value