Używanie emulatora Data Connect na potrzeby CI/CD

Firebase Data Connect udostępnia lokalny emulator do prototypowania kompleksowego oraz przepływów ciągłej integracji i ciągłego wdrażania (CI/CD):

  • Emulator Data Connect współpracuje z lokalną zintegrowaną instancją bazy danych PGLite, co umożliwia tworzenie prototypów zapytań i mutacji oraz testowanie kodu klienta w całkowicie lokalnym środowisku.
  • Emulator Data Connect może być też używany do pracy nieinteraktywnej. Umożliwia przeprowadzanie testów automatycznych i nadaje się do użycia w przypadku przepływów pracy CI/CD. Jest to przydatne, gdy schematy są stabilne i chcesz prototypować oraz testować kod po stronie klienta.

Ten przewodnik zawiera bardziej szczegółowe informacje o instalacji i używaniu emulatora niż krótki przewodnik.

Instalowanie emulatora Data Connect

Przed zainstalowaniem Local Emulator Suite, aby używać Data Connect emulatora, musisz mieć:

  • Node.js w wersji 18.0 lub nowszej.

Zainstaluj interfejs wiersza poleceń Firebase i skonfiguruj katalog projektu.

  1. Zainstaluj interfejs wiersza poleceń Firebase, postępując zgodnie z przewodnikiem instalacji. Pamiętaj o regularnych aktualizacjach, ponieważ emulator Data Connect jest stale rozwijany, a w jego przypadku wprowadzane są poprawki błędów i nowe funkcje.

  2. Jeśli nie masz jeszcze projektu Firebase, zainicjuj bieżący katalog roboczy jako projekt Firebase, postępując zgodnie z wyświetlanymi instrukcjami, aby określić, z których usług chcesz korzystać:

    firebase init

Ustawianie lub modyfikowanie konfiguracji Local Emulator Suite

Jeśli emulator Data Connect został uruchomiony z poziomu rozszerzenia Firebase w VS Code, w razie potrzeby został zainstalowany.

Za pomocą interfejsu Firebase możesz ręcznie zainstalować emulator wraz z innymi wybranymi komponentami Local Emulator Suite. To polecenie uruchamia kreatora konfiguracji, który umożliwia wybieranie interesujących Cię emulatorów, pobieranie odpowiednich plików binarnych emulatora i ustawianie portów emulatora, jeśli domyślne porty nie są odpowiednie.

  firebase init emulators

Po zainstalowaniu emulatora nie są przeprowadzane żadne kontrole aktualizacji ani nie są pobierane żadne dodatkowe automatyczne pliki do momentu zaktualizowania wersji Firebase interfejsu CLI.

Wybieranie projektu Firebase

W procesie konfiguracji interfejs Firebase CLI wyświetli prośbę o wybranie lub utworzenie projektu Firebase. Jeśli wybierzesz istniejący projekt skonfigurowany za pomocą Data Connect w konsoli Firebase, zostanie zaproponowana wybrana tam konfiguracja.

Konfigurowanie emulatora

.

Konfigurowanie emulatora

Uruchomienie procesu firebase init przeprowadzi Cię przez opcje konfiguracji emulatora. Podobnie jak w przypadku innych emulatorów w Local Emulator Suite, parametry konfiguracji są przechowywane w lokalnych plikach projektu.

  • Plik firebase.json zawiera przypisania portów emulatora.
    • Klucz emulators:ui nie ma zastosowania do Data Connect emulatora.

Praca z zasobami lokalnymi i produkcyjnymiData Connect

Jeśli chcesz mieć pewność, że nie wpłyniesz na zasoby produkcyjne, ustaw demo- projectID lub upewnij się, że kod klienta jest skonfigurowany tak, aby łączyć się z emulatorem, jak opisano w dalszej części.

Uruchamianie emulatora

Jeśli emulator jest uruchamiany w sposób nieinteraktywny, np. w przypadku przepływów pracy CI/CD, uruchom go za pomocą opcji exec.

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

Jeśli integrujesz wstępnie zdefiniowane zapytania i mutacje w kodzie klienta i używasz emulatora specjalnie do testowania klientów, możesz użyć opcji start do pracy interaktywnej. Możesz też uruchomić emulator z poziomu rozszerzenia VS Code.

firebase emulators:start

Dodaj do kodu klienta funkcje umożliwiające komunikację z emulatorem

Skonfiguruj ustawienia w aplikacji lub klasy testowe, aby wchodzić w interakcje z emulatorem Data Connect w ten sposób.

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
  

Używanie emulatora do testowania i ciągłej integracji

Uruchamianie skonteneryzowanych obrazów Local Emulator Suite

Instalacja i konfiguracja Local Emulator Suite w kontenerach w typowym środowisku CI jest prosta.

Pamiętaj o kilku kwestiach:

  • Pliki binarne emulatora są instalowane i zapisywane w pamięci podręcznej w lokalizacji ~/.cache/firebase/emulators/. Aby uniknąć wielokrotnego pobierania, możesz dodać tę ścieżkę do konfiguracji pamięci podręcznej CI.
  • Jeśli w repozytorium nie masz pliku firebase.json, musisz dodać argument wiersza poleceń do polecenia emulators:start lub emulators:exec, aby określić, które emulatory mają zostać uruchomione. Na przykład:--only dataconnect.

Czyszczenie bazy danych między testami

Aby zresetować środowiska testowe między uruchomieniami, Firebase zaleca:

  • Tworzenie dedykowanych mutacji do obsługi tych działań:
    • Podczas konfiguracji wypełnij instancję lokalnej bazy danych danymi początkowymi.
    • W trakcie wyłączania usuń zmodyfikowane dane z instancji bazy danych po teście.

Różnice między emulatorem Data Connect a wersją produkcyjną

Data Connect Emulator symuluje wiele funkcji produktu po stronie serwera. Istnieją jednak pewne wyjątki:

  • Wersja i szczegółowa konfiguracja PGLite mogą się różnić od wersji produkcyjnej instancji Cloud SQL.
  • Jeśli używasz emulatora do tworzenia aplikacji z integracją Data Connect z pgvector i interfejsem Vertex API, wywołania interfejsu Cloud Vertex API są wykonywane bezpośrednio, a nie za pomocą integracji Cloud SQL z Vertex. Wywołania produkcyjnego interfejsu API są jednak nadal wykonywane, co oznacza, że musisz używać prawdziwego projektu Firebase, nie możesz używać projektu demo- i poniesiesz koszty interfejsu API Vertex.