YMC AG
Directus-Sync ermöglicht Git-Workflows für Entwickler- und DevOps-Teams
Directus-Sync ermöglicht Git-Workflows für Entwickler- und DevOps-Teams
Die Entwicklung mit Directus, einem Low-Code-Headless-CMS, bringt die Herausforderung mit sich, Änderungen am Datenschema oder den Workflows nahtlos in Git-Workflows und CI/CD-Prozesse über diverse Feature-Branches und Testumgebungen zu integrieren. Um diesen Ablauf zu erleichtern und effizienter zu gestalten, präsentieren wir Ihnen Directus-Sync.
Avatar
Simon SchneebergerSoftware Engineer, YMC

Lesezeit: ca. 4 Minuten

letzten Monat

Directus

Was ist Directus-Sync?

Directus-Sync ist ein von der Community entwickeltes Tool auf GitHub, das es ermöglicht, Änderungen in einer Directus-Instanz als Diffs zu erfassen und diese Änderungen dann leicht in Entwickler-Instanzen zu migrieren. Das heisst, man kann beispielsweise eine neue Collection oder einen neuen Flow lokal anlegen, die Änderungen als JSON-Diff speichern und diese dann einfach in die Staging- oder Produktionsumgebung übertragen. Dies erleichtert die Anwendung moderner Git-Workflows, wie Branching und Merging, erheblich und ermöglicht eine nahtlose Zusammenarbeit im Team.

Vorteile der Verwendung von Directus-Sync

  • Zeiteffizienz: Durch die Automatisierung des Migrationsprozesses sparen Sie wertvolle Zeit, die man sonst mit dem manuellen "Nachklicken" von Änderungen in verschiedenen Umgebungen verbringen würde.
  • Präzision: Die JSON-Diffs sind klar und nachvollziehbar, was die Fehleranfälligkeit bei der Übertragung von Änderungen reduziert.
  • Kontinuierliche Integration und Deployment: Directus-Sync fügt sich nahtlos in CI/CD-Pipelines ein, was die Automatisierung des Deployments von Schemaänderungen ermöglicht.

Wie Directus-Sync Ihre Entwicklungsarbeit beschleunigt

Mit Directus-Sync lässt sich der Entwicklungsprozess deutlich vereinfachen. Beispielsweise kann man nach der Erstellung eines Flows oder einer Collection in einer lokal betriebenen Directus-Instanz einen Diff mit npx directus-sync pull erstellen. Dieser Diff, bestehend aus gut lesbaren und überprüfbaren JSON-Dateien, ermöglicht eine problemlose Migration und Überprüfung der Änderungen. Anschliessend lassen sich diese Änderungen mit npx directus-sync push in andere Directus-Instanzen einspielen.

Ein praktisches Beispiel: Entwickler A passt lokal einen Flow in seiner Directus-Instanz an und erstellt anschliessend einen Diff, z. B. bestehend aus zwei JSON-Dateien, eine für die Übersetzungsanpassung und einmal für die geänderten Operationen. Danach überführt er die Änderungen, respektive die zwei JSON-Dateien in einen Feature-Branch mit Git und erstellt einen Merge-Request. Entwickler B kann nun diesen Merge-Request überprüfen, den Branch lokal auschecken und den Diff mit npx directus-sync push in seine lokal laufende Directus-Instanz einspielen. So sind die Anpassungen von Entwickler A auch in seiner Instanz verfügbar und testbar, ohne dass er sie manuell nachvollziehen muss. Dieses Verfahren bewährt sich gleichermassen auf Staging- und Produktionsumgebungen und markiert einen signifikanten Fortschritt im Git-Workflow mit Directus.

Vereinfachte Integrationstests mit Directus-Sync

Directus-Sync eröffnet ausserdem neue Möglichkeiten für Integrationstests. Zum Beispiel können Sie mit einem einzigen Befehl pnpm directus-start in einem Docker-Container dynamisch eine SQLite3-Datenbank erstellen und eine Directus Test-Instanz einrichten. Diese Datenbank wird zunächst mit System-Tabellen für Directus durch das Bootstrapping befüllt. Danach wird die Directus Test-Instanz gestartet. Sobald der Directus-Server da ist, aktualisieren Sie die Datenbank mit dem aktuellen Schema über Directus-Sync. Im Anschluss können Sie mit pnpm test und dem JavaScript Test-Framework “Vitest” Integrationstests auf dieser Testinstanz durchführen, indem Sie die API der Directus Test-Instanz verwenden.

Für jeden Test lassen sich spezifische Fixture-Sets (JSON-Dateien) definieren, die per Vitest und über die Directus-SDK automatisch vor dem Test in die Datenbank einfügt und nachher wieder entfernt. Im eigentlichen Test erstellen Sie dann über die SDK zum Beispiel Items und können so unsere konfigurierten Flows testen. Nehmen wir als Beispiel einen Anwendungsfall, in dem bestimmte Benutzer keine Spesenauszahlungen wünschen. In einem Flow (blocking) wird validiert, ob der Benutzer Spesengesuche anlegen darf oder nicht. Wir legen ein Fixture-Set an, das einen Benutzer mit dem Flag no_expenses für Ihren Test erstellt. Wenn dann im Rahmen des Tests ein Spesengesuch für diesen Benutzer angelegt wird, scheitert dies erwartungsgemäss, da über den Flow das Directus-System überprüft, ob der Benutzer Spesengesuche anlegen darf oder nicht.

Nachteile der Verwendung von Directus-Sync

Neben den Vorteilen von Directus-Sync gibt es auch folgende Punkte zu beachten.

  • Die Synchronisierung der IDs von Systemeinträgen in der Datenbank wird durch eine separate Sync-Id-Mapping-Tabelle ermöglicht, die automatisch in der Datenbank jeder Umgebung erstellt wird. Dazu ist die Installation der Directus-Extension „directus-extension-sync“ erforderlich.
  • Beachten Sie, dass Directus-Sync keine offizielle Entwicklung von Directus ist, sondern als Community-Extension zur Verfügung steht, also keinen Hersteller-Support bietet.

Fazit

Directus-Sync vereinfacht den Umgang mit Schemaveränderungen und Workflow-Anpassungen in Directus erheblich, indem es nahtlose Git-Workflows und CI/CD-Prozesse unterstützt. Damit fördert es die orchestrierte und automatisierte Zusammenarbeit im Team und optimiert die Qualitätssicherung durch effiziente Integrationstests in digitalen Projekten auf Basis von Directus.