使用visual studio ssdt为不同的发布配置文件部署不同的种子数据?

时间:2015-11-16 10:26:32

标签: visual-studio sql-server-data-tools database-project seeding publish-profiles

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

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

我们为什么要这样做?

  • 我们希望能够这样做,因此我们可以使用一小组明确的种子数据进行单元测试。
  • 我们需要更广泛的数据集部署到测试团队的环境中,以便测试团队针对整个应用程序进行测试
  • 我们需要为pre-prod环境提供一组特定的种子数据。

2 个答案:

答案 0 :(得分:8)

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

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

稍微更简洁的版本是为每个环境提供不同的脚本文件,并通过:r import sqlcmd脚本导入它们,以便您可以:

  • PostDeploy.sql
  • DevServer.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. Build需要dacpac,复制到dev,qa,prod等env文件夹
  4. Build使用env特定脚本
  5. 替换每个中的部署后脚本

    我调用脚本PostDeploy.dev.sql,PostDeploy.Qa.sql等,并将Build操作设置为" None"或者它们被添加为"脚本,不在构建"。

    要替换部署后的脚本,您只需要使用.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));
         }
    

答案 1 :(得分:2)

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

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

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