通过代码库部署多个环境

通常,从同一个代码库部署多个环境,每个环境的配置略有不同。例如,您可能希望为预演环境分配较少的 CPU 和 RAM,或者您可能希望确保生产环境中至少有 1 个实例保持活跃状态,随时准备处理请求。您可能还需要根据要使用的环境和资源指定不同的环境变量和密钥。

本指南介绍了如何将生产环境和预演环境分别部署到单独的 Firebase 项目中。遵循相同的原则,您可以部署到其他不同类型的环境。如需详细了解环境,请参阅环境概览设置 Firebase 项目的常规最佳实践

前提条件

  • 您的应用代码已存储在 GitHub 中。
  • 您已为每个环境创建了不同的项目,例如 my-production-firebase-projectmy-staging-firebase-project。请务必为您的正式版 Firebase 项目添加“生产”环境类型标记。
  • 在每个项目中,您都创建了一个 App Hosting 后端,并将正式分支设置为您要部署的 GitHub 分支(例如 main)。如需了解详情,请参阅 App Hosting 使用入门

第 0 步:在 apphosting.yaml 中创建默认配置

App Hosting 支持名为 apphosting.yaml 的配置文件,用于管理应用的运行时设置(CPU、并发性、内存限制等)和环境变量。它还支持引用使用 Cloud Secret Manager 管理的 Secret,从而可安全地签入源代码控制系统。如需了解详情,请参阅配置后端

首先,在应用的根目录中创建一个 apphosting.yaml 文件。这是在找不到特定于环境的配置文件时使用的回退配置文件。存储在 apphosting.yaml 中的值应为适用于所有环境且安全的默认值。

以下部分介绍了如何针对特定环境替换 apphosting.yaml 中的默认值。此示例流程会创建一个预演环境。

第 1 步:设置环境名称

每个 App Hosting 后端都有一个环境名称设置。此字段用于将后端映射到特定于环境的配置文件,并且可以随时更改。每个后端只能设置一个环境名称。

如需设置后端的环境名称,请执行以下操作:

  1. 在 Firebase 控制台中,选择您的预演项目(在此示例中为 my-staging-firebase-project)。
  2. 从左侧导航栏中选择 App Hosting
  3. 在所选后端上,点击查看信息中心
  4. 设置标签页中,选择部署
  5. 环境名称下,输入您的环境名称。您可以随意为环境命名。在此示例中,该环境为预演环境
  6. 点击保存

当系统为您的后端触发 App Hosting 发布(通过 git 推送或通过控制台手动触发)时,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。

后续步骤