Liquibase: отслеживание изменений - PullRequest
0 голосов
/ 14 апреля 2020

Проект

Мы ~ 50 разработчиков, плюс сотрудники DevOps и работаем ~ 30 Oracle 12 c EE. Мы ввели Liquibase в 2018 году.

Мы используем плагин Liquibase Maven версии 3.8.8, журналы изменений хранятся в многочисленных проектах Maven, они передаются в subversion в обычной структуре trunk / tag / branch.

Цель

Мы хотим упростить подготовку новых экземпляров базы данных с помощью версий выпуска, соответствующих соответствующим средам. Типичным примером использования является установка базы данных fre sh в среде интеграционных тестов.

Можно начать с пустой схемы базы данных и применить журналы изменений до определенной версии. К сожалению, журналы изменений, которые применялись к схеме, часто хранятся в разных проектах Maven. Это затрудняет их поиск.

Liquibase НЕ сохраняет фактическое содержание набора изменений (конкретный DDL) в таблице DATABASECHANGELOG. Это решило бы проблему.

В поисках решения я сначала использовал maven, чтобы сохранить ревизию SVN журнала изменений в DATABASECHANGELOG при выполнении обновления liquibase :. Получение журналов изменений на основе номера версии было подвержено ошибкам.

Я потратил неделю сейчас, чтобы найти надежное решение, гуглил в течение нескольких часов и построил несколько тестовых случаев (с адаптированными родительскими и бетонными помпами, частично используя плагин maven scm и тому подобное), но без удачи. Изначально я планировал использовать тег liquibase: для хранения пути к файлу + ревизии, но это работает, только если все наборы изменений находятся в одном файле журнала изменений, а это не так.

Конечно, желательно иметь все Журналы изменений хранятся в ОДНОМ месте, но это не всегда возможно. Например, сценарии, которые требуют привилегий администратора баз данных, должны быть зафиксированы в дополнительных проектах maven. Мне нужна надежная ссылка между каждым набором изменений и соответствующим файлом журнала изменений, или журнал изменений должен быть сохранен непосредственно в DATABASECHANGELOG.

При нашей текущей настройке «Управление версиями базы данных» с Liquibase невозможно. Существует теоретическая прослеживаемость, но пользователи могут каким-то образом найти оригинальные журналы изменений в огромном беспорядке из 100+ отдельных проектов Maven.

Вопрос 1. Можно ли сохранить фактический контент журнала изменений для каждый набор изменений в DATABASECHANGELOG?

Вопрос 2: Если нет, как можно сохранить ссылку между записью DATABASECHANGELOG и исходным файлом журнала изменений?

(Кроме того, что происходит, когда файл журнала изменений удаляется из Subversion случайно? DATABASECHANGELOG просто сообщает мне дату и время изменения, некоторые детали и имя файла - довольно бесполезно, потому что фактический файл будет удален, и не будет никакого способа восстановить фактический DDL. Чтобы предотвратить такой сценарий, я бы сделал резервную копию всех файлов изменений. Для этого метаданные DATABASECHANGELOG недостаточно, поскольку Liquibase не отслеживает версии SVN и пути к файлам.)

1 Ответ

0 голосов
/ 15 апреля 2020

Одним из вариантов будет объединение различных SVN-репозиториев в новые с использованием SVN Externals, а затем создание нового файла журнала изменений.
Вы можете отобразить URL-адреса (тег / ветвь / ревизии SVN) в папку без копирования, используя SVN-внешние. http://svnbook.red-bean.com/en/1.7/svn.advanced.externals.html.

Надеюсь, это поможет.

...