我们将部署脚本更改为使用liquibase,但现在我开始遇到一些问题,我想提出另一种意见,或者可能知道一个合适的解决方案。
我们正在使用 Oracle,我们有很多遗留代码:包、函数、过程、触发器……(如您所见,数据库中有很多逻辑)。
我们使用以下结构:
.
..
packages
functions
triggers
baseline
S1301
S1302
S1312
xxx-changelog.xml
xx-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属性,因为如果我们不这样做会失败.
问题是我们在敏捷中工作,每 3 周我们交付新代码,有时我们必须在一个 sprint 中更改一个包,并且我们必须在下一个 sprint 中更改相同的包。
我的情况是:
1)如果我们为每个sprint添加一个新的changeSet,指向packages文件夹中的文件,例如runOnchange,这将执行所有指向这些文件的changeSet,因为内容不同,并且是runOnchange(不是什么我想要)。但这是了解 sprint 中的变化并对此进行跟踪的唯一方法。
xxx-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>
xxx-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)如果我们只为包(packages-changelog.xml)创建一个文件,并且我们使用属性runOnChange为包添加changeSet,每次文件更改时都会运行,但是你不知道什么时候我们改变它。
也许最好的解决方案是将文件(包)复制到 sprint 的文件夹中,但我想在 SVN 中保留文件的历史记录,并且在更改日志中对 sprint 的新更改有一个清晰的认识.
我的问题:
那么您知道伙计们是否有某种方法可以禁用 liquibase 中的哈希图?那么我将能够在每个 sprint 中添加它并有一个跟踪.. 如果 id 已经在数据库中,则不应再次执行,对吗?
提前致谢,