0

我有一个 SQL Server 数据库项目 ( .sqlproj),我使用它作为 CI/CD 管道的一部分来部署数据库更改。我想将相同的代码部署到两个数据库(开发和生产),但每个数据库的配置略有不同:

Dev中,我有一个 Azure AD 组Database-Dev-Developers

CREATE USER [Database-Dev-Developers] FOR EXTERNAL PROVIDER;

生产中,我有一个 Azure AD 组Database-Prod-Developers

CREATE USER [Database-Prod-Developers] FOR EXTERNAL PROVIDER;

我找不到根据配置更改构建/发布的脚本的方法。理想情况下,我希望能够在构建时指定项目配置(调试/发布),这会改变输出。

我已经尝试为文件中的相关文件添加条件表达式.sqlproj,但这没有效果:

Condition=" '$(Configuration)' == 'Debug' "
4

2 回答 2

0

您应该考虑在管道中使用令牌替换步骤。您可以为 Dev 和 Prod 添加不同的变量值来替换标记。然后,您只需要一个可用于 Dev 和 Prod 的标记化配置文件。

我不完全确定在.sqlproj文件中使用令牌是多么洁净,这取决于您要替换的配置。但我已经看到它非常成功地用于现代基于.NET Core的项目中的...config.json文件。

您可以研究的另一件事是File Transformations。我没有任何使用这些的经验。

于 2021-01-24T14:51:22.007 回答
0

我找到了这个问题的部分解决方案。可以创建一个发布配置文件,其中包含忽略某些对象类型的说明。请参阅这篇有用的博客文章,其中详细介绍了该过程,总结如下:

  1. 在 Visual Studio 中,右键单击 SSDT 项目
  2. 发布 -> 高级
  3. 选择“放置”选项卡,并选中“将对象放置在目标中但不在源中”
  4. 选中您希望忽略的对象类型旁边的“请勿丢弃...”。对我来说,这是“不要放弃用户”和“不要放弃角色”
  5. 保存发布配置文件

Azure DevOps 任务的额外步骤,Azure SQL Database deployment在“发布配置文件”设置中指定生成的发布配置文件 xml 文件。

这样做的缺点是无法部署非敏感的安全设置(例如角色成员资格),但这是我愿意在我的情况下做出的权衡。

于 2021-01-25T21:26:49.757 回答