自动化 Visual Studio 数据库架构比较并签入 GIT

Automate Visual Studio DB Schema Compare and check into GIT

我有一个用于 SQL 服务器数据库的 Visual Studio 2015 数据库项目,我可以在其中执行架构 compare/data 比较并手动将项目签入 Git。我想自动执行 schema/data 比较、生成脚本并将其签入 Git 的完整过程。有可能这样做吗?如果有怎么办?

也许我应该做这样的事情? Automating Visual Studio with EnvDTE

您可能需要稍微重新考虑一下您的方法。

总的来说,

的工作流程

Make changes in database -> Update Database Project -> Commit changes to Source Control

SSDT 不支持;特别是关于根据数据库更改更新项目的部分。

如果这是一个 .NET 项目,您会使用十六进制编辑器修补服务器上的二进制文件,然后将结果反编译为 csproj 和关联的 cs 文件以存储在源代码管理中吗?这听起来很荒谬,但它类似于您为数据库项目建议的工作流程。

我相信 Redgate 工具(我不是特别熟悉)对从已部署的数据库更新源代码控制提供了一些支持。然而,我对上述工具足够熟悉,知道预期的用例不是

Make changes in production -> Update Source Control

IMV,您可能应该分别解决 "source control" 和 "audit" 问题。

为此(使用 SSDT),您只需手动更新数据库项目一次,并将生成的文件添加到源代码管理。

之后,您可以在项目中进行更改,将它们提交到源代码管理,然后然后将这些更改部署到您的数据库。这个过程很容易自动化。

大概它只是数据库中数据的一个子集 - "static" 或 "reference" 数据 - 您需要存储在源代码管理中?最常见的方法是在数据库项目中使用 post-部署脚本。

关于审核,您有两种选择。鉴于您的 "deliberate" 更改历史将在源代码控制中,审计的主要关注点是检测生产中的 不受控制的 更改。这可以通过数据库触发器来完成,或者,我相信,通过一些商业产品(通常在幕后使用数据库触发器)来完成。在检测到此类更改时,您有几个选项 - 回滚更改、解雇 DBA、更新源代码管理中的文件等。我不确定自动化这部分过程是否明智,因为你可能会想考虑为什么会发生这些变化。

欢迎来到数据库生命周期管理 (DLM) 的世界。这是一个很大的话题,我会尽量保持简短。

一般来说,您应该先在源代码管理中进行更改,然后再从源代码管理部署到您的生产数据库。这使您有机会在将代码部署到生产环境之前在开发环境中测试您的代码。它还确保生产数据库与您测试的版本一致。

有一系列 Microsoft、第三方和开源工具可帮助您编写数据库脚本并将其导入 Git(或任何其他源代码控制系统)。一些最受欢迎的是 SSDT、Redgate SQL Source Control、Redgate ReadyRoll、Flyway、DBup、Liquibase 和 DB Maestro,但还有很多其他的。

本源码的打包部署完全可以自动化。对于自动化,大多数人使用自动化工具(或工具管道),如 TeamCity、TFS/VSTS、Jenkins and/or Octopus Deploy 来打包源代码并(可选)将其部署到数据库(或几个数据库)。这可以在每次提交或单击按钮时完成。当然,这一切的具体运作方式(以及以及这一切的运作方式)将取决于您使用的工具。

鉴于有这么多选项,如果不知道您使用哪种数据库源代码控制工具和哪种 builds/release 管理自动化工具或不推荐,就不可能提供直接的逐步解决方案一。这里还涉及很多内容,远远超过单个 SO 响应中可以讨论的内容。

但是,采用数据库源代码控制和自动化发布过程非常有价值,因此我鼓励您继续前进。从你的问题中可以清楚地看出你想改进你的流程。 :-)

您最好从查看以下内容之一开始(或查找我上面提到的任何其他名称):

另外,您似乎有审计问题。跟踪直接在生产中发生的更改,例如,当人们在不通过源代码控制的情况下进行热修复时。关于此主题还有另一个很棒的 Phil Factor 博客 post,其中详细介绍了 how to create your own automated process for tracking drift. However, if I was you I'd look at Redgate DLM Dashboard。它是第三方工具,但它是免费的,所以为什么要浪费时间重新发明轮子?

如果您想进一步了解 support/training 我的公司 DLM Consultants 运行 weekly online workshops(与 Redgate 合作),在那里您将亲身实践设置源代码控制,CI 并为 SQL 服务器发布管理进程。