背景
我正在为一个由约4位程序员和4位设计师组成的小型Web团队创建一个新的开发过程,并有望在未来发展该团队。我们的产品是一个中央应用程序,可为我们设计和托管的客户网站提供支持。
以前,我们都通过FTP在开发服务器上使用单个开发数据库进行工作。有效” *了一段时间,但我们正在进入一个新的发展方向,所以它是成熟的时间我们的进程。
我们使用Percona Server 5.5,但这应该是数据库不可知的,其思想是保持低成本。
目标:
我正在考虑为数据库开发创建一个持续集成(CI)流程,请注意以下几点:
- 开发人员拥有本地数据副本以针对其运行开发代码
- 能够将数据库结构回滚到以前的变更集
- 能够将新功能架构更改与架构设计修订更改分开
- 能够在本地修改数据库结构以进行测试
初始概念
我已经在下面使用SVN和LiquiBase勾勒出了一个过程,尽管它完全删除了#4
。
- 从主干创建一个“开发”分支
- 中央“开发”数据库服务器从“开发”分支运行
- 本地开发人员被设置为开发分支的奴隶(
#1
上面提供)- liquibase变更集定期提交给开发分支,该分支执行提交后挂钩以更新中央开发数据库(它将滴流到作为该开发服务器的从属服务器运行的本地计算机)(liquibase
#2
上面提供了)- 当功能或模式修订准备好进行质量检查时,DBA(我)将把适当的更改从开发分支合并到主干中。此操作将创建一个SQL脚本以应用于暂存数据库服务器。
- 登台服务器应反映TRUNK,该结构应与Production具有相同的结构,以及质量检查中的更改
- 在登台服务器上执行sql脚本后,请对更改进行一些质量检查。
- 如果一切看起来不错,请标记结构。这将生成.sql脚本,以供DBA在生产环境中手动运行(如果需要,请在非高峰时间运行)
此过程要求所有开发人员都在同一个“开发”分支下运行,这意味着在任何给定时间仅存在一个数据库模式版本(不确定我是否需要此版本)。
这也意味着对模式的任何更改都无法在本地进行测试,如果操作不当,可能会影响其他开发人员。在我们的环境中,开发人员可能会添加新表,但很少修改现有结构。作为DBA,设计修复工作由我完成。但是无法在本地测试修复程序是我最大的困扰。
如何调整上述过程以允许本地开发,同时仍保持数据的相对最新副本(如我建议的过程中的复制所提供的那样)?我不需要直到上周的最新数据。
* “有效”是指足够,但是PITA。