使用 TFS 2015 部署数据库更改有哪些不同的方法?
What are the different approaches for deploying DB changes using TFS 2015?
目前,我们在 CI/CD 部署之外手动 运行 数据库脚本(SQL Server 2012)。我们可以通过哪些方式(包括工具集)使用 TFS 2015 Update 3 自动部署数据库更改?
如果部署数据库更改仅意味着在 Team Foundation Server 中使用 SQL 服务器数据库项目(.sqlproj 文件)和 Team Foundation Build。
有几种方法可以实现这一点:
- 使用带有一些参数的 MSBuild 任务来发布您的 SQL 项目
在构建期间。
- 在您的 sqlproj 文件中添加部署目标,运行 构建后的目标
完成。
- 或者在您的构建中添加一个 "Batch Script" 步骤
定义 运行 "SqlPackage.exe" 以发布
.dacpac
文件。
更多详情请参考这篇博文:Deploying SSDT During Local and Server Build .
至于使用TFS2015,也可以尝试使用SQL Server Database Deployment任务。
Use this task to deploy a SQL Server database to an existing SQL
Server instance. The task uses a DACPAC and SqlPackage.exe, which
provides fine-grained control over database creation and upgrades.
这里实际上有两种方法,都适用于 TFS。实际上,TFS 只是促进了您将用于更新数据库的任何脚本的执行,包括您自定义的、手工编写的脚本。
有一种基于状态的方法,它使用比较技术来查看您的 VCS/dev/test/staging 数据库并将其与生产环境进行比较。 SQL Source Control Redgate Software 的 DLM Automation Suite 和其他比较工具一样可以做到这一点。您要做的是使用命令行或编程界面来设置源和目标,捕获输出,然后将其用作发布过程中的工件。我可能会在您的流程中包括对工件的审查作为脚本选择。
请注意,有些问题是基于状态的比较不能很好地解决的。重命名、拆分、合并、数据移动等等。一些比较工具有办法解决这个问题,有些则没有。请注意,这可能是一个问题。如果你有一个更成熟的数据库,也许不会,但你应该考虑这一点。 SQL 源代码管理允许自定义迁移脚本,可以处理这些问题。
另一种方法是脚本运行器或迁移策略,其中您对开发数据库所做的每项更改都被捕获为有序脚本,如果需要,框架会按顺序执行这些更改。这是一些人的首选,因为您可以准确地看到在开发和部署时将执行哪些代码。 ReadyRoll 来自 Redgate Software、Liquibase、Rails Migrations、DBUp、FlywayDB,都使用这种策略。
这些都没有好坏之分。两者都有效,各有利弊,但真正的选择取决于您的舒适程度和偏好。
披露:我在 Redgate Software 工作。
目前,我们在 CI/CD 部署之外手动 运行 数据库脚本(SQL Server 2012)。我们可以通过哪些方式(包括工具集)使用 TFS 2015 Update 3 自动部署数据库更改?
如果部署数据库更改仅意味着在 Team Foundation Server 中使用 SQL 服务器数据库项目(.sqlproj 文件)和 Team Foundation Build。
有几种方法可以实现这一点:
- 使用带有一些参数的 MSBuild 任务来发布您的 SQL 项目 在构建期间。
- 在您的 sqlproj 文件中添加部署目标,运行 构建后的目标 完成。
- 或者在您的构建中添加一个 "Batch Script" 步骤
定义 运行 "SqlPackage.exe" 以发布
.dacpac
文件。
更多详情请参考这篇博文:Deploying SSDT During Local and Server Build .
至于使用TFS2015,也可以尝试使用SQL Server Database Deployment任务。
Use this task to deploy a SQL Server database to an existing SQL Server instance. The task uses a DACPAC and SqlPackage.exe, which provides fine-grained control over database creation and upgrades.
这里实际上有两种方法,都适用于 TFS。实际上,TFS 只是促进了您将用于更新数据库的任何脚本的执行,包括您自定义的、手工编写的脚本。
有一种基于状态的方法,它使用比较技术来查看您的 VCS/dev/test/staging 数据库并将其与生产环境进行比较。 SQL Source Control Redgate Software 的 DLM Automation Suite 和其他比较工具一样可以做到这一点。您要做的是使用命令行或编程界面来设置源和目标,捕获输出,然后将其用作发布过程中的工件。我可能会在您的流程中包括对工件的审查作为脚本选择。
请注意,有些问题是基于状态的比较不能很好地解决的。重命名、拆分、合并、数据移动等等。一些比较工具有办法解决这个问题,有些则没有。请注意,这可能是一个问题。如果你有一个更成熟的数据库,也许不会,但你应该考虑这一点。 SQL 源代码管理允许自定义迁移脚本,可以处理这些问题。
另一种方法是脚本运行器或迁移策略,其中您对开发数据库所做的每项更改都被捕获为有序脚本,如果需要,框架会按顺序执行这些更改。这是一些人的首选,因为您可以准确地看到在开发和部署时将执行哪些代码。 ReadyRoll 来自 Redgate Software、Liquibase、Rails Migrations、DBUp、FlywayDB,都使用这种策略。
这些都没有好坏之分。两者都有效,各有利弊,但真正的选择取决于您的舒适程度和偏好。
披露:我在 Redgate Software 工作。