当 sqlproj.user 文件不在源代码管理中时,在 DACPAC 构建/部署期间会发生什么?

问题描述

我是不是遗漏了什么,还是 MS 搞砸了:

Q1:我是否应该将 projname.sqlproj.user 文件添加到源代码管理中?
问题 2:我应该以某种方式将 .publish.xml 文件合并到构建步骤中吗?
额外问题:如果没有包含所有这些关键标志的 .sqlproj.user 文件,构建服务器上会发生什么?

背景:
在我的大型企业中,我的团队拥有第一个工作 CI/CD 管道,使用构建服务器生成的 .dacpac 将 .sqlproj 交付给 sql 数据库。它正在工作,我正在学习 dacpac 绳索。

我正在处理站在我的团队和灾难之间的标志(即 DropObjectsNotInSource=false),而 git 没有看到 .sqlproj 文件中的更改。很明显,这些标志存储在 .user 文件中,而不是 .sqlproj 文件中!? (projname.sqlproj.user)

通常的做法是 .gitignore *.user 文件,MS 知道这一点,所以我疯了吗?我不希望新的开发者开始玩标志并且永远看不到 SC 的变化。

其他背景
我们的目标之一是通过 ci/cd 管道处理所有发布事件;所以我们真的不想要一个开放的路径来手动/直接发布更改甚至是 Dev env。太多的长期开发人员有一个非常坏的习惯,即完全跳过 Dev env,直接进入 QA,然后进入 Prod。因此,我们可能需要通过在 QA/Prod 中明确拒绝个人 Alter/Control 访问权来让他们震惊,但甚至可能在 Dev 环境中。

堆栈:
VS2017(2019是一个选项)
SSDT
GitHub企业
团队城市
八达通
SQLServer2016

解决方法

这是“publish.xml”或发布参数/配置文件设置。当我们对 sqlpackage.exe 进行炮击时,我们将包含具有这些设置的相应发布配置文件的选项。您也可以在命令行级别设置它。这绝对不是 *.user 文件设置。

也就是说,我通常也会将这些发布配置文件包含在项目中供开发人员使用(本地、开发等),以便他们可以双击其中之一并使用预定义的本地/开发构建设置。 (通常带有警告,例如 - 在通过生成脚本点击“发布”之前查看预览)然后我们可以将这些发布配置文件包含在我们的部署/发布操作中。

如果你走这条路,唯一的警告是,如果你使用“发布”文件夹,你可能需要调整你的 .gitignore。如果您使用的是 gitignore 存储库文件,则默认情况下,Visual Studio 项目将忽略该文件夹名称。

,

Q1 - 不,你不应该。开发人员在他们的机器上可以有非常不同的设置和首选项,将这个文件添加到源代码控制会很麻烦。这个文件应该被 gitignored(如果你使用 git)。您可以查看我的 repo,在那里我开始创建类似 SSDT template 的内容。它也有 Instant now = Instant.now(); Instant hoursAfter = now.plus(12,ChronoUnit.HOURS); Instant hoursBefore = now.minus(12,ChronoUnit.HOURS); 模板。

Q2 - .gitignore 用于发布的配置文件。您可以为不同的环境设置不同的设置。 *.publish.xml 设置应驻留在该配置文件中,因为您可能希望将这些对象放在 dev env 上而不是将其放在 prod 中。但是,如果没有特定目的,我会将这个设置 = false 用于所有环境。

额外问题 - 正如已经说过的,DropObjectsNotInSource=false 文件不应参与部署。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...