แอป gcloud ปรับใช้แฟล็ก '--appyaml' ดูเหมือนจะไม่ทำงาน

Aug 19 2020

สำหรับ 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แล้วมันจะแสดงข้อผิดพลาดดูเหมือนว่าจะใช้ข้อมูลที่ฉันป้อน

มีความคิดอะไรบ้างที่ฉันทำผิด?

คำตอบ

2 vitooh Aug 19 2020 at 17:09

ฉันได้ทดสอบบน 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)?
1 yedpodtrzitko Aug 19 2020 at 18:48

คำถามคือกล่องดำที่ไม่มีรายละเอียดใด ๆ : "ฉันมี fabfile แล้วสิ่งต่างๆก็เกิดขึ้น แต่เกิดขึ้นผิดพลาด" อย่างไรก็ตามนี่คือเคล็ดลับในการทำสิ่งนี้ให้ง่ายขึ้นโดยไม่ต้องยุ่งกับapp.yamlมัน app.yamlสามารถมีคำสั่งที่เรียกว่าincludesซึ่งสามารถอ้างอิงไฟล์ yaml อื่นซึ่งคุณสามารถมีตัวแปรสภาพแวดล้อมได้ดังนั้นคุณไม่จำเป็นต้องสัมผัสไฟล์ต้นฉบับ

app.yaml:

(...)

includes:
  - my_vars.yaml

my_vars.yaml:

env_variables:
    MY_VAR: value