Wir versuchen, Liquibase für SQL Server zu verwenden und haben eine Frage zu Kontexten und Labels. Bei der Bereitstellung in unseren Dev-, TST- und Prod-Umgebungen verwenden wir SQL Server-Synonyme und verbundene Server, die env-spezifisch sind. Bei der Bereitstellung in TST zeigen der Linked Server und das Synonym beispielsweise auf SERVER_A, aber Prod sollte auf SERVER_B verweisen. Gibt es eine Möglichkeit, dass Liquibase automatisch den richtigen SERVER-Wert einstellt, abhängig davon, in welcher Umgebung wir uns zur Release-Zeit befinden?Umgebungsspezifische SQL-Server- und Synonymdefinitionen
Antwort
Die Liquibase-Funktionen, die dazu verwendet werden, sind labels, contexts und changelog parameters. Man könnte so etwas in Ihrem Changelog hat:
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
<property name="linked.server" value="SERVER_A" context="TST"/>
<property name="linked.server" value="SERVER_B" context="Prod"/>
<changeSet id="1" author="Brian">
<sql>CREATE LINKED SERVER STATEMENT SO LINKED SERVER IS ${linked.server}</sql>
</changeSet>
</databaseChangeLog>
Ich weiß nicht, die SQL Server-Syntax für das Erstellen, was Sie wollen, so dass beispielsweise nicht ganz korrekt ist, aber die Hauptsache ist, dass Sie verwenden können, die Variable Referenz ${linked.server}
drin. Es gibt kein integriertes Liquibase-Refactoring für SQL Server-Synonyme oder Verbindungsserver. Sie können also entweder das <sql>
-Tag verwenden oder Ihre eigene Liquibase-Erweiterung schreiben, die ein neues <synonym>
- und/oder <linkedServer>
-Tag implementiert.
Beim Ausführen liquibase update
Sie das Argument
--context=TST
oder --context=Prod
und der entsprechende Wert würde ersetzt werden.
liefern würde