แอป gcloud ปรับใช้แฟล็ก '--appyaml' ดูเหมือนจะไม่ทำงาน
สำหรับ Google App Engine ฉันต้องการอัดฉีดenv_variables
ลงในapp.yaml
เมื่อทำให้ใช้งานได้ ในเอกสารgcloud app deploy
ฉันเห็นว่ามีการตั้งค่าสถานะ--appyaml
ที่จะ:
ปรับใช้กับ app.yaml เฉพาะที่จะแทนที่แอปที่กำหนดไว้ใน DEPLOYABLE
https://cloud.google.com/sdk/gcloud/reference/app/deploy
ดังนั้นฉันจึงมีสคริปต์ Fabric ที่อ่านของฉันapp.yaml
แทรกตัวแปร env พิเศษของฉันเขียน app.yaml ใหม่นี้ไปยัง tempfile แล้วเรียกgcloud app deploy
ใช้ คำสั่งที่จะgcloud
ลงเอยเช่นนี้:
gcloud app deploy . --version dev --project myproject --appyaml='/var/folders/1z/qk45g9p934lg75byl8b74xyh0000gn/T/tmpgdjVUG.yaml'
การปรับใช้สำเร็จและโค้ดใหม่ได้รับการอัปโหลดอย่างไรก็ตามตัวแปร env ใหม่ของฉันดูเหมือนจะไม่ประกอบขึ้น
หากฉันระบุค่าปลอมไป--appyaml
แล้วมันจะแสดงข้อผิดพลาดดูเหมือนว่าจะใช้ข้อมูลที่ฉันป้อน
มีความคิดอะไรบ้างที่ฉันทำผิด?
คำตอบ
ฉันได้ทดสอบบน AppEngine มาตรฐานโดยมีHelloWorld
การปรับเปลี่ยนเล็กน้อยใน node.JS ดังนี้:
'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;
ตัวอย่างกำลังแสดงตัวแปรสภาพแวดล้อมเป็นผลลัพธ์
กว่าที่ฉันเพิ่มง่ายที่สุดapp.yaml
:
runtime: nodejs10
env_variables:
MY_VAR: "my value from app.yaml"
ฉันได้เพิ่มyaml
ชื่อที่แตกต่างไปจากที่อื่นapp1.yaml
:
runtime: nodejs12
env_variables:
MY_VAR: "my value from app1.yaml"
ดังนั้นนี่คือการเปลี่ยนเวอร์ชันโหนดและค่าของMY_VAR
.
จากการทดสอบของฉันสิ่งนี้ดูเหมือนจะทำงานแตกต่างจากที่อธิบายไว้ในเอกสารเล็กน้อยอย่างน้อยฉันก็เข้าใจว่ามันต่างออกไป
เป็นไปได้ที่จะใช้--appyaml
แฟล็ก แต่เฉพาะเมื่อไม่มีapp.yaml
ไฟล์ในไดเร็กทอรี หากคุณไม่มีในไดเรกทอรีแอปแทนที่จะใช้แฟล็กคุณสามารถชี้ไปที่อื่นyaml
ได้
ดังนั้นเมื่อฉันพยายามปรับใช้กับgcloud app deploy --appyaml="/home/vitooh/app1.yaml"
และapp.yaml
อยู่ในไดเรกทอรีแอปพลิเคชันแอปก็ถูกปรับใช้ด้วยดังนั้นแฟล็กจะไม่ทำอะไรเลย อย่างไรก็ตามเมื่อฉันทำโดยapp.yaml
ที่แฟล็กใช้งานได้ค่าตัวแปรจะเปลี่ยนไป
จริงๆแล้วคุณสามารถสังเกตเห็นได้หลังจากส่งคำสั่งที่มีการสรุปแสดงก่อนที่คุณจะยืนยันการปรับใช้ในdescriptor
มูลค่าดังนี้:
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)?
คำถามคือกล่องดำที่ไม่มีรายละเอียดใด ๆ : "ฉันมี fabfile แล้วสิ่งต่างๆก็เกิดขึ้น แต่เกิดขึ้นผิดพลาด" อย่างไรก็ตามนี่คือเคล็ดลับในการทำสิ่งนี้ให้ง่ายขึ้นโดยไม่ต้องยุ่งกับapp.yaml
มัน app.yaml
สามารถมีคำสั่งที่เรียกว่าincludes
ซึ่งสามารถอ้างอิงไฟล์ yaml อื่นซึ่งคุณสามารถมีตัวแปรสภาพแวดล้อมได้ดังนั้นคุณไม่จำเป็นต้องสัมผัสไฟล์ต้นฉบับ
app.yaml:
(...)
includes:
- my_vars.yaml
my_vars.yaml:
env_variables:
MY_VAR: value