SQL Connect-Emulator für CI/CD verwenden

Firebase SQL Connect bietet einen lokalen Emulator für End-to-End Prototyping sowie für Continuous Integration und Continuous Deployment (CI/CD):

  • Der SQL Connect Emulator interagiert mit einer lokalen integrierten PGLite-Datenbankinstanz, mit der Sie Abfragen und Mutationen prototypisieren und Clientcode in einer vollständig lokalen Umgebung testen können.
  • Der SQL Connect Emulator kann auch für nicht interaktive Aufgaben verwendet werden. Sie können damit automatisierte Tests ausführen und er eignet sich für die Verwendung mit CI/CD-Workflows. Das ist nützlich, wenn Ihre Schemas stabil sind und Sie clientseitigen Code prototypisieren und testen möchten.

In diesem Leitfaden werden die Installation und Verwendung des Emulators ausführlicher als in der Kurzanleitung beschrieben.

SQL Connect-Emulator installieren

Bevor Sie die Local Emulator Suite installieren, um den SQL Connect Emulator zu verwenden, benötigen Sie Folgendes:

  • Node.js-Version 18.0 oder höher.

Firebase CLI installieren und Projektverzeichnis einrichten

  1. Installieren Sie die Firebase CLI, gemäß der Installationsanleitung. Aktualisieren Sie sie regelmäßig, da der SQL Connect Emulator aktiv weiterentwickelt wird und Fehler behoben und neue Funktionen hinzugefügt werden.

  2. Initialisieren Sie das aktuelle Arbeitsverzeichnis als Firebase-Projekt, falls noch nicht geschehen. Folgen Sie der Anleitung, um anzugeben, welche Produkte verwendet werden sollen:

    firebase init

Konfiguration von Local Emulator Suite festlegen oder ändern

Wenn Sie den SQL Connect Emulator über die VS Code-Erweiterung für SQL Connect gestartet haben, wurde der Emulator bei Bedarf für Sie installiert.

Sie können den Firebase CLI verwenden, um den Emulator manuell zusammen mit anderen ausgewählten Komponenten der Local Emulator Suite zu installieren. Mit diesem Befehl wird ein Konfigurationsassistent gestartet, mit dem Sie Emulatoren auswählen, die entsprechenden binären Emulator-Dateien herunterladen und Emulatorports festlegen können, wenn die Standardwerte nicht geeignet sind.

  firebase init emulators

Nach der Installation eines Emulators werden keine Aktualisierungsprüfungen durchgeführt und keine zusätzlichen automatischen Downloads ausgeführt, bis Sie Ihre Firebase CLI-Version aktualisieren.

Firebase-Projekt auswählen

Im Einrichtungsablauf werden Sie von der Firebase CLI aufgefordert, ein Firebase-Projekt auszuwählen oder zu erstellen. Wenn Sie ein vorhandenes Projekt auswählen, das Sie in der Firebase Konsole mit SQL Connect eingerichtet haben, wird die dort ausgewählte Konfiguration vorgeschlagen.

Emulator einrichten

Emulator konfigurieren

Wenn Sie den Ablauf firebase init ausführen, werden Sie durch die Optionen für die Einrichtung des Emulators geführt. Wie bei anderen Emulatoren in der Local Emulator Suite, werden Konfigurationsparameter in lokalen Projektdateien gespeichert.

  • Ihre firebase.json-Datei enthält Zuweisungen für Emulatorports.
    • Der Schlüssel emulators:ui gilt nicht für den SQL Connect Emulator.

Mit lokalen und Produktionsressourcen SQL Connect arbeiten

Wenn Sie sichergehen möchten, dass Produktionsressourcen nicht beeinträchtigt werden, legen Sie eine demo- Projekt-ID fest oder sorgen Sie dafür, dass Ihr Clientcode so instrumentiert ist, dass er eine Verbindung zum Emulator herstellt, wie in einem späteren Abschnitt beschrieben.

Emulator starten

Wenn Sie den Emulator nicht interaktiv ausführen, z. B. für CI/CD-Workflows, starten Sie ihn mit der Option exec.

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

Wenn Sie vordefinierte Abfragen und Mutationen in Clientcode einbinden und den Emulator speziell zum Testen von Clients verwenden, können Sie die Option start für die interaktive Arbeit verwenden. Sie können den Emulator auch über die VS Code-Erweiterung für SQL Connect starten.

firebase emulators:start

Clientcode für die Kommunikation mit dem Emulator instrumentieren

Richten Sie Ihre In-App-Konfiguration oder Testklassen so ein, dass sie mit dem SQL Connect Emulator interagieren.

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
  

Emulator für Tests und Continuous Integration verwenden

Containerisierte Local Emulator Suite Images ausführen

Die Installation und Konfiguration der Local Emulator Suite mit Containern in einer typischen CI-Einrichtung ist unkompliziert.

Es gibt jedoch einige Punkte zu beachten:

  • Binärdateien des Emulators werden unter ~/.cache/firebase/emulators/ installiert und im Cache gespeichert. Sie können diesen Pfad Ihrer CI-Cachekonfiguration hinzufügen, um wiederholte Downloads zu vermeiden.
  • Wenn sich in Ihrem Repository keine firebase.json-Datei befindet, müssen Sie dem Befehl emulators:start oder emulators:exec ein Befehlszeilenargument hinzufügen, um anzugeben, welche Emulatoren gestartet werden sollen. Beispiel: --only dataconnect.

Datenbank zwischen Tests leeren

Um Ihre Testumgebungen zwischen Ausführungen zurückzusetzen, empfiehlt Firebase Folgendes:

  • Erstellen Sie spezielle Mutationen für Folgendes:
    • Füllen Sie beim Einrichten eine lokale Datenbankinstanz mit Startdaten.
    • Löschen Sie beim Beenden geänderte Daten aus der Datenbankinstanz nach dem Test.

Unterschiede zwischen dem SQL Connect Emulator und der Produktion

Der SQL Connect Emulator simuliert viele Funktionen des serverseitigen Produkts. Es gibt jedoch einige Ausnahmen, die Sie beachten sollten:

  • Die Version und die detaillierte Konfiguration von PGLite können sich von der Version Ihrer Cloud SQL-Produktionsinstanz unterscheiden.
  • Wenn Sie den Emulator verwenden, um mit SQL Connect's pgvector- und Vertex API-Integration zu entwickeln, werden Aufrufe an die Cloud Vertex API direkt und nicht über die Vertex-Integration von Cloud SQL ausgeführt. Es werden jedoch weiterhin Aufrufe an die Produktions-API ausgeführt. Das bedeutet, dass Sie ein echtes Firebase-Projekt verwenden müssen, kein demo--Projekt verwenden können und Kosten für die Vertex API anfallen.