database - 持续集成和数据库管理

标签 database svn continuous-integration

当与其他几个人一起处理一个项目时,通常会有几个人负责不同的领域,例如数据库。

我的挑战是如何让几个人在持续集成环境中编辑数据库模型。

一位开发人员建议编写一个“版本控制脚本”,其中每个编辑都被输入到一个 .sql 脚本中,并带有数据库能够检测到的版本号。模型的新添加将在此文件中标记为版本,一旦提交脚本并运行构建,数据库将更新。

我也听说过 Publisher/Subscriber... 并阅读了一些相关内容。

您在日常工作中是如何处理这种情况的?您可以给我什么建议来使数据库更改尽可能无缝地运行?

** 编辑 **

已提及迁移框架和迁移脚本。如果您有一些实践经验并会建议一个框架,我们也将不胜感激。

最佳答案

在优秀的 Get Your Database Under Version Control 中引用 Jeff Atwood帖子:

...

I was thinking about this again because my friend and co-author K. Scott Allen just wrote a brilliant five part series on the philosophy and practice of database version control:

  1. Three rules for database work
  2. The Baseline
  3. Change Scripts
  4. Views, Stored Procedures and the Like
  5. Branching and Merging

...

真的,整个系列都值得一读,即使你们中的许多人似乎对第 3 部分特别感兴趣。顺便说一句,看看 Bulletproof Sql Change Scripts Using INFORMATION_SCHEMA Views第三部分也提到了文章。您可能已经意识到这一点,但它解释了为什么编写 idempotent 的其他良好做法。更改脚本很重要。

关于工具,您可能需要查看 UpToDater (以代码为中心),LiquiBase (基于 xml)或... dbdeploy ,基于 ThoughtWorks 软件开发的真实经验的小珍宝。这并不是说第一个 2 个不好,而是这个是我的首选(并且可用于 Java、PHP 或 .NET)。

关于database - 持续集成和数据库管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1622157/

相关文章:

database - Haskell 中的电影数据库

php - 配置设计数据库和管理器

svn - 如何让两个依赖的 Jenkins 构建使用相同的软件版本?

ruby-on-rails - Rspec:如何访问失败示例的当前种子数

git - Gerrit - 如何在 Jenkins 运行后自动发布更改

database - 如何建立用户/群组/成就数据库?

svn - 我可以使用 git-svn 并看起来像我在使用 SVN,如果可以的话怎么办?

svn - 如果提交日志中包含明确的词,则在 cc.net 上运行构建

Jenkins 与特拉维斯-CI。您会在开源项目中使用哪一个?

php - 根据字段值传递数据库字段 ID 的运行 SQL