Änderungen am Datenbankschema können fehleranfällig sein. Werden keine Artefakte als Ergebnis von Änderungen erzeugt, ist die Historie nur schwer nachzuvollziehen. Eine agile Anwendungsentwicklung erfordert meist auch häufige Anpassungen innerhalb der Datenbank. Liquibase ermöglicht eine effektive Verwaltung von Datenbankschemaänderungen, die sich ähnlich wie die Entwicklung einer Anwendung gestaltet.
Was ist Liquibase?
Liquibase ist eine Technologie zur Verwaltung von Datenbankschemaänderungen. Das Tool ermöglicht es Entwicklern Änderungen an einer Datenbank in Form von strukturierten Dateien (SQL, XML, JSON, YAML) zu definieren und zu verfolgen. Diese Dateien enthalten Anweisungen zum Erstellen, Ändern oder Löschen von Tabellen, Spalten, Indizes und anderen Datenbankobjekten. Liquibase unterstützt verschiedene Datenbankmanagementsysteme wie MySQL, PostgreSQL, Oracle, SQL Server und viele andere (vollständige Liste). Das Tool ist verfügbar in einer Open-Source-Edition sowie mit erweiterten Funktionalitäten in einer Pro- und Enterprise-Edition.
Konzepte von Liquibase
Eine einzelne Datenbankänderung wird in einem Changeset definiert. Ein Changeset hat eine eindeutige ID, einen Autor und ggf. weitere optionale Attribute. Changelog-Dateien beinhalten die Changesets in sequentieller Reihenfolge. Eine Changelog-Datei im SQL-Format könnte wie folgt aussehen:
In einem „Properties File“ wird die Datenbankverbindung konfiguriert. Alternativ können die Parameter auch über Umgebungsvariablen gesetzt werden. Hier ist ein beispielhaftes „Properties File“ für eine PostgreSQL-Datenbank:
Die Versionierung basiert auf zwei Tabellen in der Datenbank, die Liquibase bei der ersten Ausführung anlegt. Die DATABASECHANGELOG Tabelle zeichnet alle bereitgestellten Änderungen auf. Um gleichzeitige Änderungen an der Datenbank zu verhindern, werden parallele Zugriffe mithilfe der DATABASECHANGELOGLOCK-Tabelle blockiert.
Typischer Workflow
Liquibase bietet verschiedenste Kommandos zur Aktualisierung, zum Rückgängigmachen und zur Nachverfolgung von Datenbankänderungen und mehr (vollständige Liste).
In einem typischen Deployment Workflow werden folgende Kommandos gebraucht:
Müssen Änderungen zurückgenommen werden, sieht ein typischer Rollback-Workflow wie folgt aus:
Nutzung in CI/CD Pipelines
Liquibase lässt sich einfach in CI/CD Pipelines integrieren. Damit lässt sich eine automatisierte kontinuierliche Bereitstellung über verschiedene Anwendungsumgebungen, von der Entwicklung über Test bis Produktion, realisieren. In einem Versionskontrollsystem können geänderte Changelog-Dateien per Pull-Request geprüft werden. Die Pipeline kann so konfiguriert werden, dass die beiden oben dargestellten Workflows ausführbar sind. Dies kann durch direkte Liquibase-Kommandos in der entsprechenden CI/CD-Umgebung geschehen oder bei komplexeren Umgebungen kann eine Einbettung in ein Docker Utility Image sinnvoll sein. Dies ermöglicht es zusätzliche Tools wie z. B. gcloud cli bei Nutzung von Google-Cloud-Datenbanken oder Datenbankemulatoren zur Ausführung von Tests einzubinden. So lassen sich datenbankspezifische Konfigurationen innerhalb des Images in Helper-Skripte verpacken und der Aufruf aus der Pipeline heraus wird vereinfacht. Durch Anpassung auf verschiedene Datenbankmanagementsysteme wird nur ein zentrales Image benötigt.
Fazit
Mit Liquibase können sich Datenbankschemata genau wie Anwendungen im Laufe der Zeit den Anforderungen anpassen. Inkompatibilitäten zwischen der Datenbank und der Anwendung lassen sich verhindern. Artefakte der Datenbankänderungen können im Versionskontrollsystem getrackt werden, um eine transparente Historie zu gewährleisten. So lassen sich mit wenig Mehraufwand Änderungen sicher und flexibel bereitstellen.
Sie haben Fragen rund um Liquibase und/oder den Betrieb von Datenbanken? Sprechen Sie uns an.
Seminarempfehlung
MYSQL ADMINISTRATION DB-MY-01
Zum SeminarORDIX ERFOLGSBEISPIEL
Grundlage des Beitrags war ein internes Projekt. Dabei wurde eine Demo-CI/CD-Pipeline aufgebaut, in der mithilfe von Liquibase Datenbankschemata versioniert werden.
Kundennutzen:
Kunden werden auf Probleme bei der Datenbankentwicklung aufmerksam gemacht, die sie möglicherweise bei sich im Unternehmen haben. Die Technologie Liquibase wird als Lösung aufgezeigt, um eine flexiblere und nachvollziehbare Datenbankentwicklung zu erreichen.
Die Pipeline wurde bereits erfolgreich zur Demonstration von Liquibase beim Kunden eingesetzt.