Używanie emulatora SQL Connect na potrzeby CI/CD

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

  • Emulator SQL Connect współpracuje z lokalną zintegrowaną instancją bazy danych PGLite, co umożliwia prototypowanie zapytań i mutacji oraz testowanie kodu klienta w środowisku w pełni lokalnym.
  • Emulator SQL Connect może być też używany do pracy nieinteraktywnej. Umożliwia on przeprowadzanie automatycznych testów i nadaje się do użycia w przepływach 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życiu emulatora niż przewodnik Szybki start.

Instalowanie emulatora SQL Connect

Zanim zainstalujesz Local Emulator Suite, aby używać emulatora SQL Connect , musisz mieć:

  • Node.js w wersji 18.0 lub nowszej.

Instalowanie interfejsu wiersza poleceń Firebase i konfigurowanie katalogu projektu

  1. Zainstaluj interfejs wiersza poleceń Firebase zgodnie z instrukcjami instalacji . Pamiętaj, aby regularnie go aktualizować, ponieważ emulator SQL Connectjest aktywnie rozwijany, a jego aktualizacje zawierają poprawki błędów i nowe funkcje.

  2. Jeśli jeszcze tego nie zrobisz, zainicjuj bieżący katalog roboczy jako projekt w Firebase, postępując zgodnie z instrukcjami, aby określić, których usług chcesz używać:

    firebase init

Ustawianie lub modyfikowanie konfiguracji Local Emulator Suite

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

Za pomocą interfejsu wiersza poleceń Firebase możesz ręcznie zainstalować emulator wraz z innymi wybranymi komponentami Local Emulator Suite. 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 porty nie są odpowiednie.

  firebase init emulators

Po zainstalowaniu emulatora nie są przeprowadzane żadne sprawdzenia aktualizacji ani nie są pobierane żadne dodatkowe pliki automatycznie, dopóki nie zaktualizujesz wersji interfejsu wiersza poleceń Firebase.

Wybieranie projektu w Firebase

W procesie konfiguracji interfejs wiersza poleceń Firebase wyświetla prośbę o wybranie lub utworzenie projektu w Firebase. Jeśli wybierzesz istniejący projekt, który został już skonfigurowany za pomocą SQL Connect, zostanie zaproponowana konfiguracja wybrana podczas konfigurowania projektu.

Konfigurowanie emulatora

Konfigurowanie emulatora

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

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

Praca z lokalnymi i produkcyjnymi zasobami SQL 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 uruchamiasz emulator w trybie nieinteraktywnym, 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 predefiniowane zapytania i mutacje w kodzie klienta i używasz emulatora specjalnie do testowania klientów, możesz użyć opcji start do pracy interaktywnej. Emulator możesz też uruchomić z rozszerzenia SQL Connect VS Code.

firebase emulators:start

Instrumentowanie kodu klienta do komunikacji z emulatorem

Skonfiguruj ustawienia w aplikacji lub klasy testowe, aby współdziałały z emulatorem SQL 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 trybu ciągłej integracji

Uruchamianie obrazów w kontenerachLocal 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 buforowane w lokalizacji ~/.cache/firebase/emulators/. Aby uniknąć powtarzających się pobrań, 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:

  • Pisanie dedykowanych mutacji do obsługi tych czynności:
    • W konfiguracji wypełnij lokalną instancję bazy danych danymi początkowymi.
    • W procesie czyszczenia usuń zmodyfikowane dane z instancji bazy danych po teście.

Różnice między emulatorem SQL Connect a środowiskiem produkcyjnym

Emulator SQL Connect symuluje wiele funkcji usługi po stronie serwera. Istnieją jednak pewne wyjątki, o których należy pamiętać:

  • Wersja i szczegółowa konfiguracja PGLite mogą się różnić od wersji instancji Cloud SQL w środowisku produkcyjnym.
  • Jeśli używasz emulatora do programowania z SQL Connect's integracją pgvector i Vertex API, wywołania Cloud Vertex API są wykonywane bezpośrednio, a nie przez Cloud SQL's integrację Vertex. Wywoływane są jednak wywołania produkcyjnego interfejsu API, co oznacza, że musisz używać prawdziwego projektu w Firebase, nie możesz używać projektu demo- i będziesz ponosić koszty związane z Vertex API.