Octopus - SQL 部署 DACPAC 社区贡献步骤

Posted

技术标签:

【中文标题】Octopus - SQL 部署 DACPAC 社区贡献步骤【英文标题】:Octopus - SQL Deploy DACPAC Community Contributed Step 【发布时间】:2019-03-15 03:38:24 【问题描述】:

我正在使用 SQL Deploy DACPAC 社区贡献的步骤将我的 dacpac 部署到 Octopus 中的服务器。

它已正确设置并且一直工作正常,直到出现以下情况。

我有一种情况,我正在删除列,但由于检测到行而导致部署不断失败。我正在尝试使用 /p:BlockOnPossibleDataLoss=false 作为“其他部署贡献者参数”,但它似乎被忽略了。

谁能指导我哪里出了问题?

【问题讨论】:

【参考方案1】:

发布属性应该有DropObjectsNotInSource,尝试将其设置为True。 你可能想要to fine tune it, to avoid dropping users, permissions, etc.

【讨论】:

这并不能解决问题。这用于指示是否删除数据库项目,例如用户、触发器、索引等。删除列可能很好,但在其中包含行的表上仍然失败,即 BlockOnPossibleDataLoss 的原始问题应该是解决。【参考方案2】:

经过原作者多次更新,此问题仍未解决。自版本 11 以来,该参数实际上已被完全删除。

最初,我添加了一个部署前脚本,该脚本从预期会失败的表中复制所有数据,删除所有数据,允许表模式正常更新,并在部署后脚本中重新插入将所有数据放入新结构中。这样做的问题是,对于可能丢失的数据,在不需要时需要部署前和部署后脚本。

最后,我通过复制社区步骤“SQL - 部署 DACPAC”(https://library.octopus.com/step-templates/58399364-4367-41d5-ad35-c2c6a8258536/actiontemplate-sql-deploy-dacpac) 将其保存为 Octopus 中的副本来解决此问题。然后我进入代码,进入函数Invoke-DacPacUtility,并添加以下代码:

[bool]$BlockOnPossibleDataLoss进入参数列表 Write-Debug (" Block on possible data loss: 0" -f $BlockOnPossibleDataLoss)进入调试列表 if (!$BlockOnPossibleDataLoss) $dacProfile.DeployOptions.BlockOnPossibleDataLoss = $BlockOnPossibleDataLoss; 进入部署选项列表

然后,我进入参数列表,添加如下:

变量名称:BlockOnPossibleDataLoss 标签:阻止可能的数据丢失 帮助测试:如果检测到数据丢失,则为真停止部署;否则为假。默认为 true。 控件类型:复选框 默认值:真

有了这个,我可以在使用项目过程中的步骤时通过复选框更改此参数的值。

【讨论】:

以上是关于Octopus - SQL 部署 DACPAC 社区贡献步骤的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 powershell 从 Azure 还原数据库时,Octopus 部署找不到 SQL 凭据

如何从 Azure DevOps DACPAC 部署中获取漂移报告?

azure 中的 Dacpac 部署将值称为无效的列名

如何在生成的 DACPAC 文件中包含 Sql Permission Statement

如何将 DACPAC 部署到事务复制数据库

由于缺少对象,DACPAC 无法部署