2016-05-20 10 views
0

Я организую процесс автоматической доставки с использованием GIT, Bamboo, Ansible и Liquibase.Liquibase - различные версии файла

У меня возникли проблемы с использованием функции отката Liquibase. В основном у меня есть те же файлы, мой мастер изменения и файлы версий (каждый из которых имеет свой собственный раздел отката), в двух разных местах, например, в папке «обновления» и в папке «откат». Несмотря на то, что файлы одинаковы, откат просто не работает. Иллюстрирование:

+ 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 

Файлы имеют одинаковый контент.

Запуск LiquiBase обновлений и мечения прекрасно:

$>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 

Однако при попытке откатить от 1.0.1 до 1.0.0 с помощью изменения набора мастер в откате папок он говорит «LiquiBase Откат Successful» но изменения не откатываются. команда rollbackSQL также не отображает никакого соответствующего оператора SQL, кроме обновлений 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 

Похоже, файл должен быть точно такой же (для контрольной суммы, я полагаю), что шоу блокатор в моем случае, когда я должен постоянно тянуть версии из моей системы управления версиями, так что файлы будут никогда не быть «одинаковыми», хотя они имеют одинаковое содержание. Есть ли способ отключить эту проверку в Liquibase? В настоящее время я использую Liquibase 3.4.2.

+0

Я забыл упомянуть, если я запустил откат с тем же файлом, он работает. –

+0

Оформить заказ ['logicalFilePath'] (http://www.liquibase.org/documentation/databasechangelog.html). Насколько я помню, контрольная сумма включает в себя имя файла с полным путем. Поэтому, даже если у вас один и тот же файл в другой папке, это считается по-другому. Использование 'logicalFilePath' должно избегать этого. – Jens

+0

Дженс, ты понял. Это точно. Большое спасибо! –

ответ

0

LiquiBase Откат не работает таким образом, вам необходимо указать инструкции отката в < откате > части вашего сценария и выполнить его с откатом команды: http://www.liquibase.org/documentation/rollback.html

UPD: LiquiBase использует идентификатор на основе имени файла набор изменений, изменить идентификатор и идентификатор автора, чтобы определить изменения. Если вы примените <change id="1" author="dbf">...</change> из файла f1.xml, то это «виртуальный» идентификатор: <f1.xml, 1, dbf>. Когда вы запускаете f2.xml с тем же контентом для отката, он вычисляет <f2.xml, 1, dbf>, поэтому он не соответствует первому id и ничто не откатывается назад.

+0

Извините, если я не прояснился, но каждый набор изменений внутри версий файлов имеет свой собственный раздел отката. –

+0

@RicardoDuval, я обновил свой ответ. – dbf

 Смежные вопросы

  • Нет связанных вопросов^_^