6

是否可以使用 Visual Studio Sql Server Data 工具数据库项目为不同的发布配置文件部署不同的种子数据集?

我们知道您可以使用部署后脚本来部署种子数据。我们知道您可以使用发布配置文件工具部署到不同的环境。我们不知道如何将不同的种子数据部署到不同的环境。

我们为什么要这样做?

  • 我们希望能够做到这一点,这样我们就可以有一组明确的种子数据来进行单元测试。
  • 我们需要更广泛的数据集部署到测试团队的环境中,以便测试团队针对整个应用程序进行测试
  • 我们需要一组特定的种子数据用于生产前环境。
4

2 回答 2

8

有几种方法可以实现这一点,第一种方法是在部署后脚本中检查环境,例如..

if @@servername = 'dev_server'
begin
   insert data here
end

一个稍微干净的版本是为每个环境使用不同的脚本文件,并通过 :r import sqlcmd 脚本导入它们,这样你就可以拥有:

  • PostDeploy.sql
  • 开发服务器.sql
  • QAServer.sql

然后

if @@servername = 'dev_server'
begin
   :r DevServer.sql
end
if @@servername = 'qa_server'
begin
   :r QAServer.sql
end

您需要确保 .sql 文件的路径正确,然后使用 dacpac 复制它们。

您不必使用@@servername,您可以使用 sqlcmd 变量并将它们传递给每个环境,这再次比硬编码的服务器名称更简洁。

第二种方法是调整 dacpac 以使用您的特定环境更改 post delpoy 脚本,这是我的首选,并且作为 CI 构建的一部分效果最好,我的过程是:

  1. 入住变更
  2. 构建服务器构建 dacpac
  3. 构建需要 dacpac,复制到 dev、qa、prod 等 env 文件夹
  4. Build 将每个中的部署后脚本替换为特定于 env 的脚本

我将脚本称为 PostDeploy.dev.sql、PostDeploy.Qa.sql 等,并将构建操作设置为“无”,或者将它们添加为“脚本,不在构建中”。

要替换部署后脚本,您只需要使用 .net Packaging API 或一些示例,请查看我的 Dir2Dac 演示,它可以做到这一点以及更多:

https://github.com/GoEddie/Dir2Dac

进一步来说:

https://github.com/GoEddie/Dir2Dac/blob/master/src/Dir2Dac/DacCreator.cs

var part = package.CreatePart(new Uri("/postdeploy.sql", UriKind.Relative), "text/plain");

     using (var reader = new StreamReader(_postDeployScript))
     {
                reader.BaseStream.CopyTo(part.GetStream(FileMode.OpenOrCreate, FileAccess.ReadWrite));
     }
于 2015-11-16T11:18:09.033 回答
2

我已经通过编写一个 Powershell 脚本解决了这个问题,该脚本在发布时通过项目文件中的 Exec 命令自动执行。

它创建一个脚本文件,其中包括在项目文件夹中找到的所有脚本(该文件夹的名称与目标环境类似)。

然后,此脚本将包含在部署后脚本中。

于 2015-11-18T12:20:33.307 回答