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