2016-05-20 1 views
0

J'organise un processus de livraison automatique en utilisant GIT, Bamboo, Ansible et Liquibase.Liquibase - différentes versions du fichier

J'ai quelques problèmes en essayant d'utiliser la fonction de retour à l'état initial de Liquibase. Fondamentalement, j'ai les mêmes fichiers, mon maître ensemble de changements et les fichiers de version (chacun ayant sa propre section de restauration), à deux endroits différents, par exemple un dossier "mise à niveau" et un dossier "rollback". Même si les fichiers sont identiques, la restauration ne fonctionne tout simplement pas. Illustrant:

+ deployment_folder 
    + update 
     - changeset-master.xml 
     - changeset-1.0.0.xml 
     - changeset-1.0.1.xml 
    + rollback 
     - changeset-master.xml 
     - changeset-1.0.0.xml 
     - changeset-1.0.1.xml 

Les fichiers ont exactement le même contenu.

Exécution liquibase mises à jour et le marquage est très bien:

$>liquibase --username=USR --password=*** --classpath=./ojdbc7.jar --driver=oracle.jdbc.driver.OracleDriver --url=jdbc:oracle:thin:@host:port:SID --changeLogFile=update/changeset-master.xml update 
$>liquibase --username=USR --password=*** --classpath=./ojdbc7.jar --driver=oracle.jdbc.driver.OracleDriver --url=jdbc:oracle:thin:@host:port:SID --changeLogFile=update/changeset-master.xml tag 1.0.0 
$>liquibase --username=USR --password=*** --classpath=./ojdbc7.jar --driver=oracle.jdbc.driver.OracleDriver --url=jdbc:oracle:thin:@host:port:SID --changeLogFile=update/changeset-master.xml update 
$>liquibase --username=USR --password=*** --classpath=./ojdbc7.jar --driver=oracle.jdbc.driver.OracleDriver --url=jdbc:oracle:thin:@host:port:SID --changeLogFile=update/changeset-master.xml tag 1.0.1 

Cependant, en essayant de rollback de 1.0.1 à l'aide du maître 1.0.0 du jeu de changement de rollback dossier il est dit « Liquibase Rollback réussie » mais les modifications ne sont pas annulées. La commande rollbackSQL n'affiche pas non plus d'instruction SQL pertinente autre que les mises à jour DATABASECHANGELOGLOCK.

$>liquibase --username=USR --password=*** --classpath=./ojdbc7.jar --driver=oracle.jdbc.driver.OracleDriver --url=jdbc:oracle:thin:@host:port:SID --changeLogFile=rollback/changeset-master.xml rollback 1.0.0 

On dirait que le fichier doit être exactement la même chose (pour la somme de contrôle, je suppose), qui est un bloqueur de show dans mon cas, où je dois tirer constamment des versions de mon système de contrôle de code source, de sorte que les fichiers seront ne jamais être "pareil", bien qu'ils aient le même contenu. Est-il possible de désactiver cette vérification dans Liquibase? Actuellement j'utilise Liquibase 3.4.2.

+0

J'ai oublié de mentionner si j'ai exécuté la restauration avec le même fichier, cela fonctionne. –

+0

Checkout ['logicalFilePath'] (http://www.liquibase.org/documentation/databasechangelog.html). Aussi loin que je me souvienne, la somme de contrôle inclut le nom de fichier avec le chemin complet. Donc, même si vous avez le même fichier dans un dossier différent, il est considéré comme différemment. L'utilisation de 'logicalFilePath' devrait éviter cela. – Jens

+0

Jens, vous l'avez. C'est exactement ça. Merci beaucoup! –

Répondre

0

rollback Liquibase ne fonctionne pas de cette façon, vous devez spécifier des instructions rollback dans < rollback section > de votre script et l'exécuter avec la commande rollback: http://www.liquibase.org/documentation/rollback.html

UPD: Liquibase utilise id basé sur le nom du fichier changeset, changer l'identifiant et l'identifiant de l'auteur pour identifier les changements. Si vous appliquez <change id="1" author="dbf">...</change> à partir du fichier f1.xml, l'ID 'virtuel' est <f1.xml, 1, dbf>. Lorsque vous exécutez f2.xml avec le même contenu pour la restauration, l'ID qu'il calcule est <f2.xml, 1, dbf>, donc il ne correspond pas au premier identifiant et rien n'est annulé.

+0

Désolé si je ne me suis pas précisé, mais chaque modification à l'intérieur des fichiers versionnés a sa propre section de restauration. –

+0

@ RicardoDuval, j'ai mis à jour ma réponse. – dbf