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

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

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

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

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

【问题讨论】:

    标签: octopus-deploy dacpac


    【解决方案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。
    • 控件类型:复选框
    • 默认值:真

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多