2016-04-01 8 views
0

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

0

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