0

在我的公司,我们正在做 CI 和 CD 并使用 SqlPackage 来部署 dacpacs。

由于每个 Dacpac 都需要一段时间,我们并行运行它们。但有时我们会遇到依赖关系方面的问题 - 例如:正在部署 DB A,但依赖于同时部署的 DB B(例如存储过程依赖关系)

有什么方法可以运行带有一些标志或其他东西的 sqlpackage 来忽略这些依赖关系并且在部署时不会失败?

谢谢

4

3 回答 3

1

这种类型的同时部署不是推荐的方法。但是我想您可以编写一个部署贡献者来查找需要外部依赖项的步骤并重写该步骤的 TSQL,以便它将重试 TSQL,直到它成功或超过执行时间或重试计数的设定限制。请注意,在循环依赖的情况下,这可能会产生死锁,所以希望你没有。

于 2015-09-08T17:31:11.110 回答
0

我猜你得到“无效的对象名称'XX.XX.XX'”或类似的东西?

这是 sql 要求,当您执行 create/alter 时,sql 会对其进行编译并验证它是否正确,因此如果尚未部署依赖项,则 sql 将不允许您部署更新。

恐怕您需要以正确的顺序部署它们。

要限制实际部署时间(但不会停止总时间),您可以生成脚本,然后按照您拥有依赖项的顺序运行它们(除非您有两种方式的依赖项 - 我什至不确定这将如何工作! ) 因此您可以在离线时有效地生成它们,然后在部署时运行脚本(因此您将脚本生成移至 CI 步骤,而 CD 步骤只是运行脚本而不是比较然后运行脚本)

于 2015-09-08T09:35:22.127 回答
0

当您将 dacpac 添加为数据库引用时,您可以将其标记为忽略错误。这可能是您的情况的解决方案。

于 2015-09-10T06:14:20.677 回答