使用Liquibase和樱桃采摘变更集

时间:2014-06-13 07:55:36

标签: development-environment liquibase

因此,我想使用liquibase替代SQL脚本,以便在不同的开发环境中准备数据库(SIT-> UAT-> PROD)。计划是在开始测试之前执行liquibase更新(如果需要,还有一些其他参数)。

需要注意的是,必须冻结要提交给UAT和PROD的所有文件(包括liquibase XML);即,任何成功通过SIT的文件都不会有任何变化。有什么方法可以做到这一点,所以在UAT中我只能执行已经成功通过SIT的变更集(类似地,在PROD中我只能执行已成功通过UAT的变更集),而不实际更改liquibase上的XML文件?

感谢。

更新

目前的开发周期中存在一些固有的问题:

  1. 要求开发人员再次运行SIT是多余的,这次将context = SIT放入其中。
  2. 开发人员只想在UAT中测试自己的变更集。所以开发人员只负责他自己的变更集;意思是他们不想经营其他人'变更集,即使这些变更集已成功通过SIT。同样的问题也适用于UAT - > PROD。
  3. 对不起,我事前并不清楚这个问题。我的任务是在当前的工作场所实施Liquibase,而且我不能很好地了解周期中发生的事情。

3 个答案:

答案 0 :(得分:1)

Liquibase不允许您选择要执行的某些changeSet。这样做的主要原因是因为针对数据库运行的更改顺序可能会产生很大的不同。通常情况下,让开发人员只运行他们的changeSet是没有帮助的,因为应用程序仍然需要由其他人创建的数据库更改。

我认为处理场景的最常用方法是依赖您用于代码库的相同版本控制实践。 Liquibase被设计为一种简单的文本格式,因此changelog文件可以与代码一起存储在版本控制中。然后,您可以为UAT和PROD创建分支,并且可以控制进入这些分支的内容,包括更改日志中的changeSet。

答案 1 :(得分:0)

我认为最好的选择是使用上下文(http://www.liquibase.org/documentation/contexts.html)。已通过SIT的ChangeSets可以标记为context =" sit"。然后,当您使用context = sit更新UAT和PROD时,只会执行标记的更改集。

答案 2 :(得分:0)

我认为根据您的有效要求,必须在Liquibase外部的基于文件的版本控制中冻结所有脚本,这里有一个重大挑战。

Liquibase不能保证文件被冻结 - 这不是Liquibase知道的。

欢迎您查看DBmaestro Teamwork,它可以对您的数据库对象实施强制版本控制(这可以保证存储库和工作区数据库同步)。此外,生成增量脚本可以处理来自开发环境的更改的所有合并(在不同环境,UAT关键修复,分支之间)。

免责声明 - 我在DBmaestro工作