持续集成 – 对db的更改是否应始终成为CI的一部分?

这个问题出现在我正在合作的开发团队中,我们无法真正达成共识:

数据库的更改是否应该成为CI脚本的一部分?

假设您正在使用的应用程序涉及数据库.我想是的,因为这是整合的定义.如果您不包含部分应用程序,那么您实际上并未测试集成.相反的论点是,CI服务器是确保基本项目设置有效的地方 – 实质上是构建最新版代码的原始结帐.

是否有CI的“最佳实践”文档可以回答这个问题?对于那些对CI充满热情的人,这个问题是否存在争议?

Martin Fowler’s opinion on it:

A common mistake is not to include everything in the automated build.
The build should include getting the database schema out of the
repository and firing it up in the execution environment.

最佳答案 所有代码(包括数据库模式和预先填充的表值)都应受源代码控制和连续集成的影响.我见过许多使用源代码控制的项目 – 但不是在DB上.相反,有一个主数据库实例,每个人都在同一时间进行更改.这使得无法进行分支,也无法重新创建系统的早期状态.

我非常喜欢使用Visual Studio 2010 Premium的功能来处理数据库模式.它使数据库模式成为项目结构的一部分,在源代码控制下具有主模式.可以在项目外创建一个新的数据库.将自动生成升级脚本以将现有数据库提升到新架构.

对于没有VS2010 Premium或类似工具的数据库,正确地进行变更管理最多是痛苦的 – 如果可能的话.如果您没有该工具支持,我可以理解您的同事希望将数据库保留在CI之外.如果您在争论将数据库包含在CI中时遇到问题,那么可能首先获得数据库工作的descen工具集?一旦拥有了正确的工具,将数据库包含在CI中是一个自然的步骤.

点赞