将 Data Connect 模拟器用于 CI/CD

Firebase Data Connect 为您提供了一个本地模拟器,可用于端到端原型设计以及持续集成和持续部署 (CI/CD) 流程:

  • Data Connect 模拟器可与本地集成的 PGLite 数据库实例交互,以便您在完全本地的环境中对查询和更改进行原型设计,并测试客户端代码。
  • Data Connect 模拟器还可用于非交互式工作。借助该工具,您可以运行自动化测试,并将其与 CI/CD 工作流搭配使用。如果架构稳定且您想对客户端代码进行原型设计和测试,这会非常有用。

与快速入门相比,本指南更详细地介绍了模拟器的安装和使用。

安装 Data Connect 模拟器

在安装 Local Emulator Suite 以使用 Data Connect 模拟器之前,您需要满足以下条件:

  • Node.js 18.0 或更高版本。

安装 Firebase CLI 并设置项目目录

  1. 按照安装指南安装 Firebase CLI。请务必定期更新,因为 Data Connect 模拟器正在积极开发中,会不断修复 bug 并添加新功能。

  2. 如果您尚未将当前工作目录初始化为 Firebase 项目,请按照提示指定要使用的产品:

    firebase init
    

设置或修改 Local Emulator Suite 配置

如果您通过 Firebase VS Code 扩展程序启动了 Data Connect 模拟器,系统会根据需要为您安装模拟器。

您可以使用 Firebase CLI 手动安装模拟器以及 Local Emulator Suite 的其他所选组件。此命令会启动配置向导,让您选择所需的模拟器,下载相应的模拟器二进制文件,以及在默认设置不合适时设置模拟器端口。

  firebase init emulators

安装模拟器后,系统将不会执行更新检查,并且在您更新 Firebase CLI 版本之前不会自动进行额外的下载。

选择一个 Firebase 项目

在设置流程中,Firebase CLI 会提示您选择或创建 Firebase 项目。如果您选择在 Firebase 控制台中使用 Data Connect 设置的现有项目,系统会建议您选择在该控制台中选择的配置。

设置模拟器

配置模拟器

运行 firebase init 流程将引导您完成模拟器设置选项。与 Local Emulator Suite 中的其他模拟器一样,配置参数存储在本地项目文件中。

  • 您的 firebase.json 文件包含模拟器端口分配。
    • emulators:ui 键不适用于 Data Connect 模拟器。

使用本地和生产 Data Connect 资源

如果您想确保不会影响生产资源,请设置 demo- projectID,或确保您的客户端代码已插桩以连接到模拟器,如后面部分所述。

启动模拟器

如果您要以非交互方式运行模拟器(例如,在 CI/CD 工作流中),请使用 exec 选项启动模拟器。

firebase emulators:exec ./path/to/test-script.sh

如果您要在客户端代码中集成预定义查询和更改,并且专门使用模拟器来测试客户端,则可以使用 start 选项进行交互式工作。您还可以通过 VS Code 扩展程序启动模拟器。

firebase emulators:start

对客户端代码进行插桩处理以便与模拟器通信

按照以下步骤设置您的应用内配置或测试类,以便与 Data Connect 模拟器进行交互。

JavaScript
import { initializeApp } from "firebase/app";
import { connectorConfig } from "@name-of-package";
import { connectDataConnectEmulator, getDataConnect } from 'firebase/data-connect';

// TODO: Replace the following with your app's Firebase project configuration
const firebaseConfig = {
  //...
};

const app = initializeApp(firebaseConfig);

const dataConnect = getDataConnect(app, connectorConfig);
connectDataConnectEmulator(dataConnect, "localhost", 9399);

// Make calls from your app
  
Kotlin Android
val connector = MoviesConnector.instance

// Connect to the emulator on "10.0.2.2:9399"
connector.dataConnect.useEmulator()

// (Alternatively) if you're running your emulator on non-default port:
connector.dataConnect.useEmulator(port = 9999)

// Make calls from your app
  
iOS
let connector = DataConnect.dataConnect(DefaultConnectorClient.connectorConfig)

// Connect to the emulator on "127.0.0.1:9399"
connector.useEmulator()

// (alternatively) if you're running your emulator on non-default port:
connector.useEmulator(port: 9999)

// Make calls from your app
  

使用模拟器进行测试和持续集成

运行容器化 Local Emulator Suite 映像

在典型的 CI 设置中,安装和配置使用容器的 Local Emulator Suite 非常简单。

您需要注意以下几个问题:

  • 模拟器二进制文件安装在 ~/.cache/firebase/emulators/ 中并在该目录下缓存。您可能需要将此路径添加到 CI 缓存配置,以免重复下载。
  • 如果您的代码库中没有 firebase.json 文件,则必须向 emulators:startemulators:exec 命令添加命令行参数,以指定应启动的模拟器。例如 --only dataconnect

在多轮测试之间清空数据库

如需在运行之间重置测试环境,Firebase 建议:

  • 编写专用更改以处理以下情况:
    • 在设置过程中,使用起始数据填充本地数据库实例。
    • 在拆解过程中,从测试后数据库实例中删除修改后的数据。

Data Connect 模拟器与生产环境的区别

Data Connect 模拟器可模拟服务器端产品的许多功能。不过,也有一些例外情况:

  • PGLite 的版本和详细配置可能与您的生产 Cloud SQL 实例的版本不同。
  • 如果您使用模拟器通过 Data Connect 的 pgvector 和 Vertex API 集成进行开发,则会直接调用 Cloud Vertex API,而不是通过 Cloud SQL 的 Vertex 集成进行调用。不过,系统仍会调用正式版 API,这意味着您必须使用真实的 Firebase 项目(不能使用 demo- 项目),并且需要承担 Vertex API 的费用。