簡體   English   中英

App Engine:基於環境的不同 app.yaml 文件

[英]App Engine: different app.yaml files based on environment

我目前正在將一個應用程序遷移到 Google App Engine,它依賴於各種外部連接的環境變量。 看起來 app.yaml 文件是我應該設置這些配置的地方,但是我如何管理這些變量可能不同的不同環境(開發、測試、暫存、生產)?

最簡單的解決方案是否只是使用不同的 app.yaml 文件為每個環境創建一個分支?

app.yaml可以為應用程序的其余部分設置環境變量,但它無法檢查它們並根據它們的傳入值做不同的事情。 因此,您確實需要向正在使用的任何部署過程提供不同的app.yaml文件。

至於准備正確的app.yaml作為 GAE 部署的初步步驟的最佳方法,這是一個更微妙的 devops 問題。 你提到的 git 或 hg 中的分支會起作用,但就我個人而言(也許只是運氣不好?-)我經常發現我的結構越簡單越好,並且分支打算長期存在(如與打算很快合並回后備箱的臨時偏差相反)給了我更嚴重的頭痛。

所以,如果由我決定,我會有一個preapp.yaml模板(可能是 jinja2,無論如何),其中包含所需的 if/else 邏輯,並從中准備正確的app.yaml ,作為任何部署的第一步,用一個簡單的 Python 腳本。

當前測試版的gcloud preview deployment-manager幾乎使用了那種架構(用於所有類型的配置文件,因此具有更多不可避免的復雜性),請參閱https://cloud.google.com/deployment-manager/ ,所以當然,我可能會偏向這種方法(但正如我提到的,我的偏向主要來自以前糟糕的部署經歷:-)。

我需要一個可以與 CD 管道配合使用的解決方案。 我在我的 git 存儲庫上使用構建觸發器。 使用這些,我可以將要啟動的分支名稱模板化到我的 cloudbuild.yaml 文件中。 我的第一個構建步驟是使用 branch_name 作為條件值從 shell 腳本生成 app.yaml。

# cloudbuild.yaml
- name: 'ubuntu'
  args: ['bash', 'app.yaml.sh', '$BRANCH_NAME']

出於同樣的原因,我剛剛遇到了這個問題。 我最終為每個開發和產品創建了別名:

alias dev-deploy='cat dev.yaml > app.yaml; gcloud app deploy dev.yaml; rm app.yaml'
alias prod-deploy='cat prod.yaml > app.yaml; gcloud app deploy; rm app.yaml'

如果你運行gcloud app deploy --help它說你可以將它傳遞給你想要用於部署的.yaml的路徑:

EXAMPLES
    To deploy a single service, run:

        $ gcloud app deploy ~/my_app/app.yaml

假設您有一個要部署到的qa, uat, and prod環境。 您可以輕松地為每個文件創建文件app.[env].yaml ,然后根據某些環境變量或 CI/CD 管道中的某些內容傳入您想要定位的文件路徑。

https://cloud.google.com/sdk/gcloud/reference/app/deploy#:~:text=POSITIONAL%20ARGUMENTS,in%20the%20DEPLOYABLE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM