通过 Octopus 和 TeamCity 将数据库包部署到 SQL 服务器

Deploying a database package to SQL Server through Octopus & TeamCity

我正在通过 Redgate 软件和 TeamCity 为 SQL 服务器数据库实施 CI/CD。我设法构建 NuGet 数据库包并将其推送到 Octopus。我可以在 Octopus 的库部分看到 NuGet 包。但是我在将该包部署到 SQL 服务器时遇到了问题。我在 Octopus 流程部分找不到 内置步骤模板 "Deploy a NuGet package"。我也试过 "Deploy a package" 步骤模板,但 worked.I 没有遵循本指南。

https://documentation.red-gate.com/sr1/worked-examples/deploying-a-database-package-using-octopus-deploy-step-templates

我们将不胜感激任何帮助。

问得好,要将 Redgate 的工具与 Octopus Deploy 结合使用,您需要安装他们提供的步骤模板。我推荐create a database release and deploy a database release. When you are browsing the step template you might notice the step template to deploy directly from a package。 SQL Change Automation 基于状态的功能通过将存储在 NuGet 包中的数据库状态与目标数据库进行比较来工作。每次它 运行s 它都会创建一组新的增量脚本来应用。因此,推荐的流程是:

  1. 将数据库包下载到跳转框中。
  2. 通过比较跳转框上的包与 SQL 服务器上的数据库来创建增量脚本。
  3. 查看增量脚本(可以在开发和测试中跳过)。
  4. 运行 SQL 服务器上的脚本使用跳转箱上的触手。

让我们继续逐一浏览。下载包的步骤非常简单,除了选择包名外没有自定义设置。

Redgate - 创建数据库发布步骤更有趣一些。这是生成将在数据库上 运行 的实际增量脚本的步骤。使大多数人感到困惑的是导出路径。导出路径是增量脚本将导出到的位置。这需要是 Octopus Deploy 触手文件夹之外的目录。这是因为 "Redgate - Deploy from Database Release" 步骤需要访问该路径,并且每个步骤的 Tentacle 文件夹都不同。

我喜欢做的是使用项目变量。

变量的完整值为:

C:\RedGate\#{Octopus.Project.Name}\#{Octopus.Release.Number}\Database\Export

下一步是批准数据库发布。我建议创建一个自定义团队来对此负责。我的偏好是在 Dev 和 QA 中跳过这一步。

创建数据库发布步骤利用了 Octopus Deploy 中内置的工件功能。这允许批准者下载文件并查看它们。

最后一步是部署数据库版本。此步骤采用导出数据路径中的增量脚本,并将其 运行 发送到目标服务器上。这就是为什么我建议将导出路径放在变量中的原因。

其他一些有助于开始的常规项目。首先,不要将触手直接安装到 SQL 服务器实例上。在生产中,典型的 SQL 服务器设置是一个集群,或者它们有多个节点,具有始终在线的高可用性。通过虚拟 IP 处理对 SQL 服务器的访问。

如果您要在两个节点上安装 Tentacles,Octopus Deploy 将尝试同时在两个节点上 运行 更改脚本(默认情况下)。那会引起很多戏剧性的后果。我建议使用跳转框,因为您需要在 Octopus Deploy 和 SQL Server 之间放置一些东西。当您对此感到满意时,我建议您使用 worker(但这有点范围蔓延,所以我不会介绍它)。

如果您想了解更多关于如何连接它的信息,请查看我写的博客post(并从中复制了这个答案)here

我还写了一个关于使用 Octopus Deploy 进行数据库部署的完整系列文章,您可以找到 here

最后,我们的 documentation covers jump boxes and permissions 您将需要执行数据库部署的用户。

希望对您有所帮助!