sql-server - 通过 Octopus 和 TeamCity 将数据库包部署到 SQL Server

标签 sql-server database devops octopus-deploy redgate

我正在通过 Redgate 软件和 TeamCity 为 SQL Server 数据库实现 CI/CD。我设法构建 NuGet 数据库包并将其推送到 Octopus。我可以在 Octopus 的库部分看到 NuGet 包。但是我在将该包部署到 SQL Server 时遇到了问题。我在 Octopus 进程部分找不到内置步骤模板“部署 NuGet 程序包”。我也尝试过“部署包”步骤模板,但没有用。我正在按照本指南进行操作。

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

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

最佳答案

问得好,要将 Redgate 的工具与 Octopus Deploy 结合使用,您需要安装他们提供的步骤模板。我推荐create a database releasedeploy a database release .当您浏览步骤模板时,您可能会注意到步骤模板为 deploy directly from a package . SQL Change Automation 基于状态的功能通过将存储在 NuGet 包中的数据库状态与目标数据库进行比较来工作。每次运行时,它都会创建一组新的增量脚本来应用。因此,推荐的过程是:

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

Basic Database Deployment Process

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

Download Package Step

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

Redgate Create Release

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

Project Variables

变量的完整值是:

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

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

Approve Release

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

Octopus Deploy Artifacts

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

Deploy Database Release

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

Virtual IP Access of SQL Server

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

Jumpbox and Octopus Deploy

如果您想了解更多关于如何连接它的信息,请查看我写的博客文章(并从中复制以获得此答案)here .

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

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

希望对您有所帮助!

关于sql-server - 通过 Octopus 和 TeamCity 将数据库包部署到 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57671151/

相关文章:

大数据量的数据库设计

apache - 我已经启动了我的 Docker 容器,但它没有熬夜

c# - 如何遍历复杂类型对象列表并传递给调用 SQL 存储过程的方法

sql - 如何使用 SQL 进行递归连接以获取最低级别的数据

android - SQLite insert No such column error on android

amazon-web-services - 在AWS Fargate的容器启动时创建文件

git - Dockerfile 版本控制最佳实践

sql-server - FreeTDS:用户登录失败

sql-server - 如何在SQL Server的数据库中搜索字符串

database - 非识别关系中的强制性和非强制性