【发布时间】:2009-01-01 17:26:44
【问题描述】:
假设我们有一个持续集成服务器。当我签入时,后挂钩会提取最新代码,运行测试,打包所有内容。自动化数据库更改的最佳方法是什么?
理想情况下,我会构建一个安装程序,既可以从头开始构建数据库,也可以使用某种自动同步方法更新现有数据库。
【问题讨论】:
标签: sql-server database continuous-integration
假设我们有一个持续集成服务器。当我签入时,后挂钩会提取最新代码,运行测试,打包所有内容。自动化数据库更改的最佳方法是什么?
理想情况下,我会构建一个安装程序,既可以从头开始构建数据库,也可以使用某种自动同步方法更新现有数据库。
【问题讨论】:
标签: sql-server database continuous-integration
我最近遇到了an article,可能有用。
作者解释了一些最佳的持续集成实践,包括测试、处理和自动化。
以下是一些关键要点:
【讨论】:
如果您有机会定义和控制整个数据库管理和数据库创建过程,请认真查看DB Ghost - 它不仅仅是一个工具 - 它是一个过程。
如果您喜欢它并且可以实施它,您将获得丰厚的回报 - 但它有点像“全有或全无”的方法。推荐。
【讨论】:
我会告诫不要将数据库备份用作开发工件,大多数 CI 最佳实践建议您将架构、过程、触发器和视图作为一流的开发工件进行管理。副作用是,您可以更进一步,随时使用它们来构建新数据库,理想情况下,您还可以将一些数据推送到数据库中。
这里有一个悬崖笔记版本,可以让你的脚湿透,但这个空间有很多: http://www.infoq.com/news/2008/02/versioning_databases_series
我也喜欢 Scott Ambler 在这里提出的一些想法,该网站不错,但对于如此困难的一组问题,这本书的深度令人惊讶。 http://www.agiledata.org/ http://www.amazon.com/exec/obidos/ASIN/0321293533/ambysoftinc
【讨论】:
Red Gate 是一个非常强大的解决方案,它开箱即用。 但最好的事情是您可以将它与您的持续集成过程集成。我将它与 Msbuild 和 Hudson 一起使用。 快速解释它是如何工作的: http://blog.vincentbrouillet.com/post/2011/02/10/Database-schema-synchronisation-with-RedGate
如果您需要了解更多相关信息,请随时询问
【讨论】:
使用 SQL Source Control 和 SQL Compare Pro 命令行的 Red Gate 方法在此处通过代码示例进行了详细说明: http://downloads.red-gate.com/HelpPDF/ContinuousIntegrationForDatabasesUsingRedGateSQLTools.pdf
Troy Hunt 在 Simple Talk 上写了一篇题为“SQL Server 数据库的持续集成”的文章: http://www.simple-talk.com/content/article.aspx?article=1247
【讨论】:
您看过 FluentMigrator 吗?默认下载包括易于添加到 CI 中的 Nant 脚本。免费、开源且易于使用。适用于各种数据库。
【讨论】:
最新版本 (5.0) 的 DB Ghost 没有遇到“非 ASCII 字符”问题(它只是意味着文件是 UTF8 编码的),它应该能够完全满足您的需求。
此外,如果您愿意,这些工具实际上可以独立使用来执行各种功能(脚本、构建、比较、升级和打包),只是将它们一起使用提供了完整的端到端流程,从而使总价值大于各部分之和。
本质上,要对架构进行更改,您需要更新单个对象创建脚本和每个表的插入脚本(用于参考数据),这些脚本受源代码控制,就像您开发“第一天”的新建数据库一样。 DB Ghost 工具用于通过将这些脚本构建到一个全新的数据库(如果需要使用持续集成)然后比较和升级目标数据库(可以是生产数据库的副本)来启用整个功能。此过程会生成一个增量脚本,该脚本可在上线期间用于实际生产数据库。
您甚至可以生成一个 Visual Studio 数据库项目并将其添加到您当前拥有的任何解决方案中。
马尔克
【讨论】: