Wie automatisiere ich Datenbankbereitstellungen mit Liquibase?

Kredit

Die Liquibase ist ein Tool zur Verwaltung von Datenbankänderungen. Mit ihr können Sie Datenbankänderungen verfolgen, die mit SQL- (oder XML-) Skripten vorgenommen wurden. Diese Skripte können zu Versionskontrollsystemen wie git hinzugefügt werden.

In diesem Beitrag erfahren Sie, wie Sie Datenbankbereitstellungen mithilfe von Liquibase automatisieren. Die Automatisierung kann mit erfolgen

1. Jenkins-Pipeline

2. Shell-Skripte

Ich werde nicht über diese beiden sprechen, da es nicht Gegenstand dieses Beitrags ist - nur um die Dinge einfach und auf den Punkt zu bringen.

Es gibt zwei Möglichkeiten, Änderungssätze in Liquibase zu schreiben, d. H. XML und SQL. Ich habe SQL ausgewählt, um zu vermeiden, dass bei jedem SQL-Update entsprechende XML-Änderungen vorgenommen werden. Auf diese Weise wird dieselbe SQL-Datei, die wir für unsere Entwicklung geschrieben haben, für Liquibase-Bereitstellungen verwendet.

Beachten Sie, dass ich diese Schritte nur für die Postgre-Datenbank getestet habe. Die gleichen Schritte sollten jedoch für jede Datenbank wiederholbar sein. Stellen Sie außerdem sicher, dass Liquibase auf Ihrem Computer konfiguriert ist.

Befolgen Sie die folgenden Schritte:

Erstellen Sie eine Changelog-Datei

Erstellen Sie eine XML-Datei mit dem Namen liquibase-changelog.xml (Name kann übrigens beliebig sein!) Mit folgendem Inhalt:


xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation = "http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd ">

... mehr  Tags gibt es hier ...

Beachten Sie das Include-Tag im obigen XML. Jede SQL-Änderungssatzdatei, die von Liquibase verfolgt werden muss, muss in dieser Änderungsprotokolldatei registriert werden.

Erstellen Sie SQL-Changesets

Fügen Sie die SQLchangeset-Dateien an einem Ort Ihrer Wahl hinzu. Die SQL-Syntax, die mit Liquibase funktioniert, lautet:

--liquibase formatiertes sql
--changeset : 

--rollback 
--rollback 

Sehen wir uns ein Beispiel an:

--liquibase formatiertes sql
--changeset xameeramir: create-test-table
CREATE TABLE IF NOT EXISTS testTable (
columnName1 VARCHAR (355)
);
--rollback TROPFENTABELLE
--rollback testTable
Beachten Sie, dass sich eine SQL-Änderungssatzdatei von der XML-Änderungsprotokolldatei unterscheidet.

Registrieren Sie den SQL-Änderungssatz in der Changelog-XML-Datei

Fügen Sie die SQL-Änderungssatzdatei in die zuvor erstellte Änderungsprotokolldatei mit den folgenden XML-Tags ein:

 /  .sql” relativeToChangelogFile = "true" />

Fügen Sie so viele SQLchangesets hinzu und registrieren Sie sie in der Changelog-Datei, wie Sie möchten.

Liquibase auslösen, um die Datenbank zu aktualisieren

Führen Sie einfach den folgenden Befehl aus:

liquibase --changeLogFile =  /  .xml --username =  --password =  --classpath =  / postgresql- 42.2.5.jar --url = jdbc: postgresql: //  /  -Update

Der Klassenpfad ist der JDBC-Treiber, den wir im letzten Beitrag konfiguriert haben. Die postgresql-42.2.5.jar ist der für Postgres spezifische JDBC-Treiber und sollte ohne besondere Änderungen in diesen Schritten durch die Datenbank Ihrer Wahl ersetzt werden können.

Der obige Befehl kann in den Shell-Skripten oder der CI / CD-Pipeline verwendet werden, um Datenbankaktualisierungen auszulösen.

Die CI / CD-Automatisierung

Sobald die obige Konfiguration vorgenommen wurde, kann die Automatisierung entweder auf dem Client mithilfe von Shell-Skripten oder auf dem Server mithilfe von Shell-Skripten oder mithilfe der CI / CD-Implementierung erfolgen.

Unter der Annahme, dass eine CI / CD-Implementierung vorhanden ist, die die Bereitstellung von Liquibase auslöst, wird der oben angegebene Liquibase-Auslösebefehl bei jedem Git-Push an DEVELOP (oder einen beliebigen Zweig) ausgeführt.

Die erste Voraussetzung ist eine liquibase-changelog.xml-Datei. Nehmen wir an, wir halten es auf der Ebene ~ / mit include-Anweisungen, die auf den Ordner verweisen, in dem sich die SQL-Änderungssätze befinden. Der folgende Workflow automatisiert die Datenbankbereitstellung mithilfe der CI / CD-Pipeline:

  • Übertragen Sie die SQL-Änderungssatzdatei in das Feature-Repository
  • Erhöhen Sie eine Pull-Anforderung für die DEVELOP-Verzweigung
  • Führen Sie nach einer gültigen Begutachtung und Genehmigung den Feature-Zweig mit dem DEVELOP-Zweig zusammen
  • Die auf dem DEVELOP-Server konfigurierte CI / CD-Implementierung löst die Liquibase für Datenbankaktualisierungen aus
  • Liquibase führt automatisch nur neue Dateien aus (alle bereits ausgeführten Dateien werden nie wieder ausgeführt)

Die Automatisierung mit Shell-Skripten

Derselbe Liquibase-Auslösebefehl wird in die Shell-Skripte geschrieben. Sobald die Shell-Skripte ausgeführt wurden, werden die enthaltenen Liquibase-Changesets automatisch ausgeführt.

Sie fragen sich vielleicht, woher die Shell-Skripte wissen, wann sie ausgeführt werden müssen? Die Antwort ist einfach:

  • Die Shell-Skripte können auf den Cron-Triggern ausgeführt werden
  • Die Shell-Skripte können bei einigen Systemereignissen ausgeführt werden

Es ist deine Entscheidung!