透過程式碼集部署多個環境

通常會從相同的程式碼集部署多個環境,每個環境的設定略有不同。舉例來說,您可能會想為測試環境指派較少的 CPU 和 RAM,或是確保實際環境至少有 1 個執行個體處於活動狀態,並準備好處理要求。您也可以視要使用的環境和資源而指定不同的環境變數和機密資料。

本指南說明如何將正式版和測試環境部署至各自的 Firebase 專案。您可以依循相同原則,部署至其他不同類型的環境。如要進一步瞭解環境,請參閱「環境總覽」和「設定 Firebase 專案的一般最佳做法」。

事前準備

  • 您的應用程式程式碼已儲存在 GitHub 中。
  • 您已為每個環境建立專屬專案,例如 my-production-firebase-projectmy-staging-firebase-project。請務必使用「production」環境類型來標記實際工作環境 Firebase 專案。
  • 您在每項專案中都建立了一個 App Hosting 後端,並將即時分支版本設為要部署的 GitHub 分支版本 (例如 main)。詳情請參閱開始使用 App Hosting

步驟 0:在 apphosting.yaml 中建立預設設定

App Hosting 支援名為 apphosting.yaml 的設定檔,可用於管理應用程式的執行階段設定 (CPU、並行、記憶體限制等) 和環境變數。它也支援使用 Cloud Secret Manager 管理的密鑰參照,因此可以安全地檢查原始碼控管機制。詳情請參閱「設定後端」。

如要開始使用,請在應用程式的根目錄中建立 apphosting.yaml 檔案。這是備用設定檔,會在找不到特定環境設定檔時使用。儲存在 apphosting.yaml 中的值必須是預設值,適用於所有環境。

以下各節說明如何針對特定環境覆寫 apphosting.yaml 中的預設值。這個範例流程會建立測試環境。

步驟 1:設定環境名稱

每個 App Hosting 後端都有「環境名稱」設定。這個欄位可用於將後端對應至特定環境的設定檔,且可隨時變更。每個後端只能設定一個環境名稱。

如要設定後端的環境名稱,請按照下列步驟操作:

  1. 在 Firebase 主控台中選取要測試的專案 (本例為 my-staging-firebase-project)。
  2. 從左側導覽面板中選取 App Hosting
  3. 在所選後端上按一下「查看資訊主頁」
  4. 在「設定」分頁中,選取「部署」
  5. 在「環境名稱」下方輸入環境名稱。您可以隨意命名環境。本例中是「測試」
  6. 按一下 [儲存]

當後端 (在 Git 推送或透過控制台手動觸發) 觸發了 App Hosting 推出作業時,App Hosting 會先檢查 apphosting.ENVIRONMENT_NAME.yaml 檔案,然後再提回 apphosting.yaml

步驟 2:建立環境專屬的 apphosting.yaml 檔案

針對特定環境設定,請建立名為 apphosting.ENVIRONMENT_NAME.yaml 的檔案,以便指定特定環境的覆寫值。這個檔案的格式與預設的 apphosting.yaml 相同,且必須位於應用程式的根目錄中,並與 apphosting.yaml 檔案並列。

在建構期間,App Hosting 會合併這兩個檔案,並優先指定環境特定 YAML 檔案中的值,而非基礎 apphosting.yaml 檔案的值。

在這個範例中,您會在應用程式的根目錄中建立名為 apphosting.staging.yaml 的檔案:


runConfig:
  cpu: 1
  memoryMiB: 512
  concurrency: 5

env:
  -   variable: API_URL
    value: api.staging.service.com
    availability:
      -   BUILD

  -   variable: DATABASE_URL
    secret: secretStagingDatabaseURL

假設您已有如下所示的 apphosting.yaml

runConfig:
  cpu: 3
  memoryMiB: 1024
  maxInstances: 4
  minInstances: 0
  concurrency: 100

env:
  -   variable: API_URL
    value: api.service.com
    availability:
      -   BUILD
      -   RUNTIME

  -   variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
      -   RUNTIME

  -   variable: API_KEY
    secret: secretIDforAPI

最終的合併輸出內容如下所示,您可以在 Cloud Build 記錄中查看:

runConfig:
  cpu: 1
  memoryMiB: 512
  maxInstances: 4
  minInstances: 0
  concurrency: 5

env:
  -   variable: API_URL
    value: api.staging.service.com
    availability:
      -   BUILD

  -   variable: STORAGE_BUCKET
    value: mybucket.appspot.com
    availability:
      -   RUNTIME

  -   variable: API_KEY
    secret: secretIDforAPI

  -   variable: DATABASE_URL
    secret: secretStagingDatabaseURL

請注意,部分 runConfig 值 (例如 CPU) 和任何重疊的環境變數都會遭到覆寫。

步驟 3:部署程式碼庫

編輯環境專屬 apphosting.ENVIRONMENT_NAME.yaml 檔案後,請將檔案推送至 GitHub:

$ git add apphosting.<ENVIRONMENT_NAME>.yaml
$ git commit -m "Added environment specific yaml file"
$ git push

標記此環境名稱的所有後端都會使用您在其對應 YAML 檔案中指定的特定覆寫值,而找不到值時,則會改回使用 apphosting.yaml。針對沒有相關環境名稱的後端,您可以繼續使用 apphosting.yaml。

後續步驟