2013-09-10 4 views
3

Мы меняем наш сценарий развертывания на использование liquidibase, но теперь у меня возникают некоторые проблемы, которые я хотел бы получить по другому поводу или, может быть, знаю подходящее решение для этого.Передовая практика - использование пакетов LiquiBase

Мы используем Oracle, и у нас есть много устаревшего кода: пакеты, функции, процедуры, триггеры .. (как вы можете видеть, много логики в базе данных).

Мы используем структуру последующей:

. 
.. 
packages 
functions 
triggers 
baseline 
S1301 
S1302 
S1312 
xxx-changelog.xml 

хх-changelog.xml выглядит следующим образом:

<include file="baseline/xxx-baseline-changelog.xml" relativeToChangelogFile="true" /> 

<!- Sprint change logs --> 
<include file="S1304/xxx-s1304-changelog.xml" relativeToChangelogFile="true" /> 
<include file="S1308/xxx-s1308-changelog.xml" relativeToChangelogFile="true"/> 
<include file="S1309/xxx-s1309-changelog.xml" relativeToChangelogFile="true"/> 
<include file="S1310/xxx-s1310-changelog.xml" relativeToChangelogFile="true"/> 
<include file="S1311/xxx-s1311-changelog.xml" relativeToChangelogFile="true"/> 

Потому что мы не хотим, чтобы скопировать файл каждый раз, когда в новую папку, мы указываем на тот же файл, и поскольку мы меняем контент, мы должны установить runOnChange свойство, потому что, т это не сработает.

Дело в том, что мы работаем в Agile, и каждые 3 недели мы поставляем новый код, иногда нам приходится менять один пакет за один спринт, и мы должны изменить один и тот же пакет в следующем.

Моя ситуация:

1), если добавить новую ревизию для каждого спринта, указывая на файл в папке пакетов, например, с runOnchange, это будет выполнять все ревизии, которые указывают на эти файл, потому что контент отличается, и runOnchange (это не то, что я хочу). Но это единственный способ узнать об изменениях в спринте и проследить за этим.

ххх-S1311-changelog.xml

<changeSet id="XXX_SEND_TO_PP_PCK_S1311" author="e-ballo" runOnChange="true"> 
    <sqlFile path="../packages/XXX_SEND_TO_PP_PCK.pkb" splitStatements="false" relativeToChangelogFile="true"/> 
</changeSet> 

ххх-s1312-changelog.xml

<changeSet id="XXX_SEND_TO_PP_PCK_S1312" author="e-ballo" runOnChange="true"> 
    <sqlFile path="../packages/XXX_SEND_TO_PP_PCK.pkb" splitStatements="false" relativeToChangelogFile="true"/> 
</changeSet> 

2) если мы создадим файл только для пакетов (пакеты-changelog.xml), и мы добавляем changeSet для пакета с свойством runOnChange, который будет запускаться каждый раз, когда файл изменяется, но у вас нет видимости, когда мы его меняем.

Возможно, лучшим решением является копирование файла (пакета) в папку спринта, но я хотел бы сохранить историю файла в SVN, а также иметь четкое представление о новых изменениях для спринта в журнале изменений.

Мой вопрос:

Так что вы знаете, ребята, если есть какой-то способ, чтобы отключить HashMap в LiquiBase? то я смогу добавить его в каждый спринт и иметь трек .. и если идентификатор уже в базе данных не должен выполняться снова, я прав?

Спасибо заранее,

+0

Другими словами есть какой-либо способ исключить контрольную сумму в changeSet? – eballo

ответ

1

Я знаю, что это старый, отвечая на тех, кто попадается ему в будущем.

Нет, контрольные суммы довольно укоренились в том, как работает Liquibase, runOnChange - правильный способ сделать это.Проблема заключается в том, что вы должны быть более подробными с вашими изменениями. Помните: в список изменений могут входить другие изменения.

, если добавить новую ревизию для каждого спринта, указывая на файл в папке пакетов, например, с runOnchange, это будет выполнять все ревизии, которые указывают на этих файлов, так как содержание Diferent, и runOnchange (это не то, что я хочу). Но единственный способ: знать изменения в спринте и отслеживать это.

Ваша структура проекта хороша, вам просто нужно сделать шаг дальше. Сделать фактические журналы изменений установить пакет/функция/триггер/и т.д. часть этих каталогов, так как они, вероятно, никогда не нужно менять один раз написано в любом случае:

. 
├── functions 
│   ├── my_function_changelog.xml 
│   └── sql 
│    └── my_function.sql 
├── packages 
│   ├── my_package_changelog.xml 
│   └── sql 
│    └── my_package.sql 
└── triggers 
    ├── my_trigger_changelog.xml 
    └── sql 
     └── my_trigger.sql 

Затем, когда вам необходимо включить в вашем освобождении вы включает в себя, что статические списке изменения вместо того, чтобы определить новую ревизию каждый раз (что, как вы обнаружили, путает LiquiBase):

<include file="../packages/my_package_changelog.xml" relativeToChangelogFile="true" /> 

Теперь у вас есть след-способность с тем, что вы сделали с каждым спринтом без случайно повторной установки пакетов вы этого не хотели.

+0

Я не понимаю. Например, у вас есть папка 'v002'. Это папка для вашей следующей версии. Затем вы добавляете статический 'my_function_changelog.xml'. Насколько я понимаю, он будет содержать все функции, которые у вас есть проект. Но вы все еще не знаете, какую именно функцию вам нужно. Таким образом, вы точно не определяете, какие функции вы хотите развернуть, не так ли? – Skoffer

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