使用 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 映像

安装和配置包含容器的 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 的费用。