1

我正在寻找一种特定的策略/约定,该策略/约定适用于功能分支和数据库部署工具(如 DbUp、DbDeploy、ReadyRoll 等)的并发开发。

我们为并发项目开发运行多个功能分支。

在此处输入图像描述

每个分支机构都有一个专门的开发、QA 和 UAT 环境,通过 Octopus deploy 进行部署。

我正在尝试使用 Octopus 处理自动数据库部署,该工具将处理每个分支中应用的更改。

数据库更改将发生在所有分支(包括发布分支)中。

到目前为止,我看到的大多数工具都使用基于序列的脚本方法,这些脚本被检入 VCS 并由该工具部署。该工具在大多数情况下以文件名升序应用脚本,并且我见过的大多数都指定遵循 1、2、3 等方法。

这适用于一个分支。

我的问题将是当功能 A 有 1 并且功能 B 有 1 时 - 两者都被合并到主分支中。我现在有两个 #1 脚本。让它变得更有趣——我们的生产路径是再合并一次,它也可能有一个 1。所以现在我们有 3 个 #1 脚本。

还有向后合并的问题。一旦项目完成 - 将发布分支合并回主分支,然后再次合并到功能分支以将其重置为下一个项目。在这种情况下 - 我有两个额外的 #1 脚本尚未应用于目标功能分支数据库。

我对此的最初解决方案是使用儒略日期作为检入源的 sql 文件名的前导前缀。我还在考虑将分支名称与工作项一起应用于文件。因此 sql 文件将遵循 {XXXXX_Y_ZZZZZZ.sql} 的约定,其中 xxxxx 是朱利安日期,y 是分支,zzzzzz 是来自 TFS 的工作项。

我正在寻找这个问题的具体解决方案。有没有其他人解决了这个问题?你做了什么?有什么缺点?你用了什么工具?

4

1 回答 1

2

您是否研究过 Readyroll 的语义版本控制

我们现在正在实施 Readyroll,我们是一个小团队,在其中很容易沟通和限制功能分支之间的更改。

我们集成到开发分支并尽早检测冲突的更改,并在必要时基本上重写早期的迁移脚本(这需要您的数据库项目的基线,您可以恢复到该基线)

在 Redgate 网站上,有更多关于使用分支的信息,但并未完全涵盖您的场景,请使用 readyroll 切换分支

在查看工具时,我基本上得出的结论是在基于状态的方法或基于迁移的方法之间进行选择。我喜欢 readyroll 对它的看法,它提供了一种混合。

我很好奇你的结局是什么!

于 2017-08-06T09:49:43.917 回答