Bendera gcloud app deploy '--appyaml' tampaknya tidak berfungsi
Untuk Google App Engine, saya ingin memasukkannya env_variables
ke dalam aplikasi saya app.yaml
. Di dokumen untuk gcloud app deploy
, saya melihat ada bendera --appyaml
yang 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 gcloud
akhirnya 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 --appyaml
maka itu akan membuat kesalahan, jadi sepertinya itu menggunakan masukan saya.
Ada ide apa yang bisa saya lakukan salah?
Jawaban
Saya telah mengujinya di AppEngine standar dengan HelloWorld
modifikasi 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 yaml
disebut 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.
--appyaml
Bendera dapat digunakan , tetapi hanya jika tidak ada app.yaml
file 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.yaml
berada di direktori aplikasi, aplikasi itu diterapkan dengannya - jadi panji tidak melakukan apa pun. Namun ketika saya melakukannya tanpa app.yaml
bendera berfungsi, nilai variabel berubah.
Sebenarnya Anda dapat melihatnya tepat setelah mengirimkan perintah di mana ada ringkasan yang ditampilkan, tepat sebelum Anda mengonfirmasi penerapan, dalam descriptor
nilai 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)?
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.yaml
dapat 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