自动化Visual Studio DB架构比较并检查GIT

时间:2016-09-19 14:46:52

标签: visual-studio-2015 sql-server-2012 sql-server-data-tools

我有一个用于SQL Server DB的Visual Studio 2015数据库项目,我可以在其中进行模式比较/数据比较,并手动将项目签入GIT。我想自动完成这个完整的模式/数据比较过程,生成脚本并将其检入GIT。有可能吗?如果是这样的话?

我可以这样做吗? Automating Visual Studio with EnvDTE

2 个答案:

答案 0 :(得分:7)

欢迎来到数据库生命周期管理(DLM)的世界。这是一个非常重要的话题,我会尽我所能保持尽可能短。

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

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

此源代码的打包和部署绝对可以自动化。对于自动化,大多数人使用自动化工具(或工具管道)(如TeamCity,TFS / VSTS,Jenkins和/或Octopus Deploy)来打包源代码并(可选)将其部署到数据库(或多个数据库)。这可以在每次提交时完成,也可以在单击按钮时完成。当然,这一切是如何工作的(以及它是如何工作的)将取决于你使用的工具。

鉴于有这么多选项,在不知道您使用或不推荐的构建/发布管理的哪个数据库源控制工具和哪个自动化工具的情况下,无法提供直接的逐步解决方案是不可能的一。这里涉及的内容也很多,而且可以在单个SO响应中进行讨论。

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

您可能最好先查看以下其中一项(或查找我上面提到的任何其他名称):

另外,您似乎有审计问题。跟踪生产中直接发生的变化,例如,当人们在不经过源代码管理的情况下进行热修复时。关于此主题的另一篇伟大的Phil Factor博客文章详细介绍了how to create your own automated process for tracking drift。但是,如果我是你,我会看Redgate DLM Dashboard。它是第三方工具,但它是免费的,为什么浪费时间重新发明轮子?

如果您希望进一步支持/培训我的公司,DLM顾问,运行weekly online workshops(与Redgate合作),您可以在那里练习设置源控制,CI和发布管理流程SQL Server。

答案 1 :(得分:2)

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

一般来说,

的工作流程
  

在数据库中进行更改 - >更新数据库项目 - >提交更改   来源控制

SSDT不支持

;特别是关于根据对数据库的更改来更新项目的部分。

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

我相信Redgate工具 - 我并不是特别熟悉 - 有一些支持从已部署的数据库更新源代码控制。然而,我对所述工具非常熟悉,知道预期的用例不是

  

更改生产 - >更新源代码管理

IMV,您可能应该单独解决“源控制”和“审核”问题。

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

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

据推测,它只是数据库中数据的一个子集 - “静态”或“参考”数据 - 您需要存储在源代码管理中吗?最常见的方法是在数据库项目中使用部署后脚本。

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