Używanie emulatora Data Connect na potrzeby CI/CD

Firebase Data Connect udostępnia lokalny emulator do prototypowania end-to-end, a także przepływy ciągłej integracji i ciągłego wdrażania (CI/CD):

  • Emulator Data Connect współpracuje z lokalną zintegrowaną instancją bazy danych PGLite, aby umożliwić tworzenie prototypów zapytań i mutacji oraz testowanie kodu klienta w pełni lokalnym środowisku.
  • Emulatora Data Connect można też używać do nieinteraktywnej pracy. Umożliwia uruchamianie testów automatycznych i jest odpowiedni do stosowania w procesach CI/CD. Jest to przydatne, gdy schematy są stabilne i chcesz tworzyć prototypy oraz testować kod po stronie klienta.

Ten przewodnik zawiera bardziej szczegółowe informacje o instalowaniu i używaniu emulatora niż przewodnik szybkiego startu.

Zainstaluj emulator Data Connect.

Przed zainstalowaniem Local Emulator Suite, aby korzystać z emulacji Data Connect, 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, zgodnie z instrukcją instalacji. Pamiętaj o regularnym aktualizowaniu, ponieważ emulator Data Connect jest w trakcie aktywnego rozwoju i zawiera poprawki błędów oraz nowe funkcje.

  2. Jeśli nie zostało to jeszcze zrobione, zainicjuj bieżący katalog roboczy jako projekt Firebase, postępując zgodnie z wyświetlanymi instrukcjami dotyczącymi wyboru usług:

    firebase init
    

Ustawianie lub modyfikowanie konfiguracji Local Emulator Suite

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

Aby ręcznie zainstalować emulator wraz z innymi wybranymi komponentami Local Emulator Suite, możesz użyć interfejsu wiersza poleceń Firebase. To polecenie uruchamia kreatora konfiguracji, który umożliwia wybranie interesujących Cię emulatorów, pobranie odpowiednich plików binarnych emulatora i ustawienie portów emulatora, jeśli domyślne nie są odpowiednie.

  firebase init emulators

Po zainstalowaniu emulatora nie są wykonywane żadne sprawdzania aktualizacji ani dodatkowe automatyczne pobierania, dopóki nie zaktualizujesz wersji interfejsu wiersza poleceń Firebase.

Wybieranie projektu Firebase

W trakcie konfigurowania wiersz poleceń Firebase wyświetli prompt z 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 w nim konfiguracja.

Konfigurowanie emulatora

Konfigurowanie emulatora

Przeprowadzenie 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 dotyczy emulatora Data Connect.

Praca z lokalnymi i produkcyjnymi zasobami Data Connect

Jeśli chcesz mieć pewność, że nie wpłyniesz na zasoby produkcyjne, ustaw demo- projectID lub upewnij się, że kod klienta jest zinstrumentowany, aby nawiązywać połączenia z emulatorem, jak opisano w następnym rozdziale.

Uruchom emulator

Jeśli uruchamiasz emulator w trybie nieinteraktywnym, np. w ramach procesów CI/CD, uruchom go z opcją exec.

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

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

firebase emulators:start

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

Skonfiguruj konfigurację w aplikacji lub przetestuj klasy, aby nawiązywać interakcję 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 na Androidzie
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 z kontenerami w typowej konfiguracji CI jest prosta.

Należy pamiętać o kilku kwestiach:

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

Czyszczenie bazy danych między testami

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

  • Pisanie specjalnych mutacji do obsługi tych zadań:
    • Podczas konfiguracji wypełnij lokalną instancję bazy danych danymi początkowymi.
    • Podczas rozwiązywania problemu usuń zmodyfikowane dane z instancji bazy danych po teście.

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

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

  • Wersja i szczegółowa konfiguracja PGLite mogą się różnić od wersji instancji produkcyjnej Cloud SQL.
  • Jeśli używasz emulatora do tworzenia aplikacji z integracją interfejsu pgvector API i Vertex API w usłudze Data Connect, wywołania interfejsu Cloud Vertex API są wykonywane bezpośrednio, a nie przez integrację Vertex w usłudze Cloud SQL. Wywołania interfejsu API w produkcji są jednak nadal wykonywane, co oznacza, że musisz użyć prawdziwego projektu Firebase, a nie projektu demo-. Będą też naliczane koszty interfejsu Vertex API.