c# - 源代码管理中的存储过程 - 自动化构建/部署过程

标签 c# tsql version-control stored-procedures build-process

我的公司提供大型 .NET 面向服务的解决方案。服务层与由数百个表和存储过程组成的 T-SQL 后端交互。我们的 C# 代码在版本控制 (SVN) 中,但我们的存储过程和模式不是。

经过权宜之计的高层管理人员的多次游说,我被允许审查我们的(不存在的)构建/部署过程以实现以下目标:

  1. 将架构和存储过程置于源代码控制之下。
  2. 自动化构建/部署过程。

我想按照 this post 中已接受答案的策略进行操作但还有其他问题:

  1. 我想使用 Hudson 作为我的构建服务器。这是 C#/SQL 解决方案的合理选择吗?我应该探索哪些更好的替代方案?

  2. 假设我有所有触发器、存储过程、模式等...都在源代码控制下,并且它们被编写到单独的文件中,我如何生成一个构建脚本来考虑依赖项/引用在这些项目之间? (SQL Server 会自动执行此操作,但会生成一个巨大的脚本)

  3. 在客户端执行更新的工作流程是什么样的?即我必须保留现有的表数据。如何回滚架构更改?

  4. 我是唯一的程序员。其他几个伪技术人员喜欢直接在 SQL Management Studio 中进行更改。期望其他人遵守这个解决方案是否现实——我该如何强制执行?

预先感谢您的帮助。

编辑:

很遗憾,我们将无法使用 TFS。不过,我们确实有 Visual Studio 2008/2010 和可用的数据库项目组件,所以看起来我必须拼凑出一个基于脚本的解决方案。任何建议/更新表示赞赏..

最佳答案

Microsoft 堆栈中用于 T-SQL 部署的典型示例是 Visual Studio 数据库项目部署过程。在此过程中,您的数据库架构、过程、权限分配和几乎所有其他内容都存储为 VSDB 项目的一部分,这意味着它们存储为 SQL 定义文件,并在源代码控制下进行检查(SVN 很好)。 “构建”过程提供一个 .dbschema 文件,该文件包含整个 VSDB 项目的综合(是一个美化的 XML 文件)。然后将 .dbschema 文件传送到部署服务器(开发服务器、QA 验证服务器,甚至生产服务器)并“部署”。部署是通过 vsdbcmd 完成的该工具将在部署服务器和 .dbschema 文件之间运行复杂的差异,并根据目标数据库中存在的内容,酌情使用 CREATE/ALTER/DROP 语句将服务器与 .dbschema 文件的内容“对齐”/服务器。

一个连续集成的过程将开始每晚构建,将 .dbschema 与测试 SQL 服务器上的其他可交付成果一起删除,部署 .dbschema,然后运行构建验证测试,如果一切顺利,最终将删除一个完整的构建和 QA 验证的可交付成果,即每日“下降”。完全集成一直到部署到生产中是可能的,但通常由于中央生产服务器意外停机的风险而避免。然而,完全集成和部署到生产中通常是多服务器环境的规范,其中“生产”意味着成百上千个已部署的服务器。

现在你说你想使用 Hudson 进行部署,这很好,除了你必须重新创建我在上面的步骤中描述的所有内容作为 Ants 构建步骤,你将在接下来的 10 年里重新发明 VS DB 项目概念,如 .dbschema 文件和工具,如 vsdbcmd。我不是那个可以打电话投资购买基于 VSDB 和 TFS 的构建服务器许可证的人,但我是说我不知道​​ OSS 中可用的端到端解决方案。我相信,对于 VS 2010,数据库项目是标准版。使用 VS 2008,您需要高端许可证。

当用户使用 SSMS 进行更改时:您可以使用 DDL triggers 来阻止他们,您可以使用 Event Notifications 跟踪它们,或者您可以使用 C2 compliant audit 全面审核它们.

关于c# - 源代码管理中的存储过程 - 自动化构建/部署过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2909198/

相关文章:

version-control - 备份或复制 Azure 移动服务脚本?

sql-server - T-SQL 聚合函数子查询

sql - 从 CTE 更新表中的记录

php - MySQL表的基本版本控制

c# - 无法在 ApplicationInsights 中使用 MetricManager

sql-server - SQL Server TRY...CATCH 未捕获错误

android - 从 Android Studio 自动提交并推送到 GitHub

c# - 如何在 C# 中创建 256 兆像素的图像?

C# 代码更改未通过 IIS 反射(reflect)

c# - 有没有办法将元组重建为兼容类?