具有持续集成的 SQL Server 数据库管理
假设我们有一个持续集成服务器。 当我签入时,后挂钩会拉取最新代码,运行测试,打包所有内容。 自动化数据库更改的最佳方法是什么?
理想情况下,我会构建一个安装程序,它可以从头开始构建数据库,也可以使用某种自动同步方法更新现有数据库。
Let's say we have a continuous integration server. When I check in, the post-hook pulls the latest code, runs the tests, packages everything. What is the best way to also automate the database changes?
Ideally, I'd build an installer that could either build a database from scratch or update an existing one using some automated syncing method.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
我最近遇到了 一篇文章,可能有用。
作者解释了一些最佳的持续集成实践,包括测试、处理和自动化。
以下是一些关键要点:
I've recently bumped into an article, that might be of use.
The author explained some of the best continuous integration practices including testing, processing and automation.
Here are some of the key takeaways:
如果您有机会定义和控制整个数据库管理和数据库创建过程,请认真查看 DB Ghost - 它不仅仅是一个工具 - 它是一个过程。
如果您喜欢它并且能够实施它,您将获得丰厚的回报 - 但这有点像“全有或全无”的方法。 受到推崇的。
If you have the opportunity to define and control the whole database management and db creation process, have a serious look at DB Ghost - it's more than just a tool - it's a process.
If you like it and can implement it, you'll get great returns on it - but it's a bit of a "all-or-nothing" kind of approach. Recommended.
我会警告不要使用数据库备份作为开发工件,大多数 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< /a>
I would caution against using a db backup as a development artifact, most CI best practices suggest that you manage the schema, procedures, triggers, and views as first class development artifacts. The side effects is that you can take this one step further and use them to build a new database whenever you want, ideally you also have some data that can be pushed into the database.
Here is a cliff notes version to get your feet wet, but there is lots out there in this space:
http://www.infoq.com/news/2008/02/versioning_databases_series
I like some of the ideas that Scott Ambler has here as well, the site is good but the book is surprisingly deep for such a difficult set of problems.
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-synchronization-with-RedGate
如果您需要了解更多信息,请随时询问
Red Gate is a quite robust solution and it works out of the box.
But the best thing is that you can integrate it with your continuous integration process. I use it with Msbuild and Hudson.
quickly explaining how it works:
http://blog.vincentbrouillet.com/post/2011/02/10/Database-schema-synchronisation-with-RedGate
if you need to know more about this, feel free to ask
使用 SQL 源代码管理和 SQL Compare Pro 命令行的 Red Gate 方法在此处详细介绍了代码示例:
Troy Hunt 在 Simple Talk 上写了一篇题为“SQL Server 数据库的持续集成”的文章:
http://www.simple-talk.com/content/article.aspx ?文章=1247
The Red Gate approach using SQL Source Control and the SQL Compare Pro command line is detailed with code samples here:
http://downloads.red-gate.com/HelpPDF/ContinuousIntegrationForDatabasesUsingRedGateSQLTools.pdf
Troy Hunt wrote an article on Simple Talk entitled "Continuous Integration for SQL Server Databases":
http://www.simple-talk.com/content/article.aspx?article=1247
你看过FluentMigrator吗? 默认下载包括可以轻松添加到 CI 中的 Nant 脚本。 免费、开源且易于使用。 适用于多种数据库。
Have you looked at FluentMigrator? The default download includes Nant scripts that would be easy to add in to a CI. Free, open source and easy to use. Works for a wide variety of databases.
DB Ghost 的最新版本(5.0)不会遇到“非 ASCII 字符”问题(它只是意味着文件是 UTF8 编码的),并且它应该能够完全满足您的需要。
此外,如果您愿意,这些工具实际上可以独立使用来执行各种功能(脚本编写、构建、比较、升级和打包),只是将它们一起使用可以提供完整的端到端流程,从而提高整体价值大于其各部分之和。
本质上,要更改模式,您需要更新单个对象创建脚本和每个表插入脚本(用于参考数据),这些脚本位于源代码控制之下,就像您开发“第一天”新建数据库一样。 DB Ghost 工具用于通过将这些脚本构建到全新的数据库中(如果需要,使用持续集成)然后比较和升级目标数据库(可以是生产数据库的副本)来实现整个过程。 此过程会生成一个增量脚本,可在上线期间在实际生产数据库上使用。
您甚至可以生成 Visual Studio 数据库项目并将其添加到您当前拥有的任何解决方案中。
马尔克
The latest version (5.0) of DB Ghost doesn't suffer from the "non ASCII character" problem (it just means that the file is UTF8 encoded) and it should be able to do exactly what you need.
Also, the tools can actually be used standalone to perform the various functions (scripting, building, comparing, upgrading and packaging) if you want, it's just that using them all together provides a full end-to-end process thus making the overall value greater than the sum of it's parts.
In essence, to make changes to the schema you update individual object creation scripts and per-table insert scripts (for reference data) that are held under source control just like you were developing a “day one” greenfield database. The DB Ghost tools are used to enable the whole thing by building these scripts into a brand new database (using continuous integration if required) and then comparing and upgrading a target database, which can be a copy of the production database. This process produces a delta script which can be used on the real production database during go-live.
You can even produce a Visual Studio database project and add it into any solutions you currently have.
Malc
我知道这篇文章很旧,但我们有一个新的解决方案,采用以下方法:
控制。
源代码控制,对它们进行过滤和排序,并生成一个
发布脚本文件。
数据库做一个发布。
我们的主页此处更详细地解释了此过程,并提供了一个示例的链接,该示例自动执行这些步骤Subversion 挂钩。 因此,提交后不久,开发人员就会收到一封电子邮件,说明发布是否成功或有错误。 包含 PowerScript 代码。
免责声明 - 我在制作 OneScript 的公司工作。
I know this post is old, but we have a new solution that takes the following approach:
control.
source control, filters and sorts them, and generates a single
release script file.
database to do a release.
Our home page here explains this process in more detail and has a link to an example that does these steps automatically from a Subversion hook. So soon after a commit, the developer receives an email saying if the release was successful or had errors. The PowerScript code is included.
Disclaimer -I'm working at the company that makes OneScript.