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

從同一個程式碼集部署多個環境是很常見的做法,每個環境的設定會略有不同。舉例來說,您可能想為測試環境分配較少的 CPU 和 RAM,或確保正式環境至少有 1 個執行個體處於運作中狀態,隨時準備處理要求。您可能也需要根據要使用的環境和資源,指定不同的環境變數和密鑰。

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

必要條件

  • 應用程式程式碼已儲存在 GitHub。
  • 您已為每個環境建立不同的專案,例如 my-production-firebase-project 和 my-staging-firebase-project。請務必將正式版 Firebase 專案標記為「production」環境類型。
  • 在每項專案中,您都已建立 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 後端都有「Environment name」(環境名稱) 設定。這個欄位用於將後端對應至環境專屬設定檔,且可隨時變更。每個後端只能設定一個環境名稱。

如要設定後端的環境名稱,

  1. 在 Firebase 控制台中,選取測試環境專案 (在本範例中為 my-staging-firebase-project)。
  2. 依序前往「Hosting & Serverless」>「 App Hosting」。
  3. 在所選後端上按一下「查看」。
  4. 在「設定」分頁中,選取「環境」。
  5. 在「Environment name」(環境名稱) 下方,輸入環境名稱。您可以視需要任意命名環境。在本例中為 staging。
  6. 按一下「儲存」。

當後端觸發 App Hosting 推出作業時 (透過 git push 或手動透過 Firebase 控制台),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.firebasestorage.app
    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.firebasestorage.app
    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。

後續步驟