【问题标题】:Executing Database Job as part of TFS Build作为 TFS 构建的一部分执行数据库作业
【发布时间】:2014-08-06 12:30:24
【问题描述】:

我请求对我在 TFS 中进行的数据库部署执行“冒烟测试”。我希望能够在 TFS 中部署后执行用于填充数据的数据库作业。之后,可以运行一些 SQL 语句,结果是插入了多少条记录,诸如此类。

我研究了使用 SSDT 进行单元测试,但想知道是否还有其他选择(另外,您似乎只能使用该方法启动 SPROC)。

任何建议将不胜感激。

【问题讨论】:

  • 始终可以选择使用部署后脚本作为 SQL 项目的一部分来填充数据。您可以查看 Red-Gate 的 SQL Data Compare Pro 以在构建后从某个已知来源进行填充。肯定有选择,但它可能有助于澄清您计划插​​入/更新的数据。如果您可能遇到要更新的现有数据,我可能会调查 SQL 数据比较。
  • 该作业只能在较低的环境中运行,我们在每次部署后都会删除/创建数据库,因此它主要是插入。
  • 你是如何部署数据库的?你在用 dacpac 吗?
  • 在这种情况下,我要么编写插入脚本以作为部署后脚本或其他进程运行,要么针对“好”源运行 SQL 数据比较作业。 (可能是只读数据库,因此没有人意外对其进行更改)可能还需要考虑使用“新”发布配置文件来区分您是否会在部署后脚本中更新/填充表。
  • 正在通过 dacpac 部署数据库。

标签: sql-server tfs msbuild sql-server-data-tools


【解决方案1】:

假设您已经有一个 SSDT 项目,并且您正在使用 DACPAC 作为构建的一部分进行部署,并且您只是想知道如何将数据群包含在部署中。我通常做的只是使用带有一大堆 INSERT 的部署后脚本(我通常将它分成单独的文件,每个表都有 INSERT,然后使用 :r 语法将它们包含在主要的部署后脚本中)。要生成插入脚本,我通常会使用 SSMS 中的功能来编写数据库脚本,并在高级选项中告诉它仅编写数据脚本,然后将其复制粘贴到我的部署后脚本中。

【讨论】:

    【解决方案2】:

    就个人而言,我会使用 sqlcmd EXEC 任务,但可能(更有可能)这个 sqlcmd-msbuild 任务。

    http://www.msbuildextensionpack.com/help/4.0.5.0/html/3b72c130-7fc9-8b8a-132c-62999e5b1183.htm

    您可以拥有 INSERT 脚本。

    您还可以结合 Andy Leonard 讨论的一些“单元测试”方法。

    http://www.dotnetrocks.com/default.aspx?showNum=312

    【讨论】:

    • 你有一个很好的例子吗?我编写了一个启动工作的 SPROC,并观察工作活动直到它完成(基本上包装了一个 ASYNC SPROC 调用),我想从 MSBuild 调用 SPROC,并等待它返回。 SPROC 最多可能需要 10 分钟才能完成。
    【解决方案3】:

    我建议您不要将此作为构建的一部分。

    您希望构建速度很快,这可能意味着您不需要应用程序实例。您应该使用发布管理工具将您的应用程序部署到环境中,然后它们会在那里运行实例测试。

    您可以使用 RM for Visual Studio 2013 创建执行此操作的发布管道。这些工具包含用于创建和更新数据库的拖放元素。

    http://nakedalm.com/building-release-pipeline-release-management-visual-studio-2013/

    【讨论】:

    • 我们已经使用 PowerShell 和 WindowsRM (Visual Studio 2012) 通过 TFS 插入部署。由于我们已经拥有整个系统,并且我们想要的只是在部署到较低环境时填充数据的简单方法。
    【解决方案4】:

    你考虑过tSQLt吗? tSQLt 是开源的,可能是最常用的 SQL Server 单元测试框架。要正确使用它,您需要在测试本身 (INSERT) 中插入数据。这是处理测试设置的一种特别巧妙的方法,因为 tSQLt 在测试运行后回滚事务,使您的测试环境恢复到已知状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多