Sql server 2012 使用TFS 2015部署数据库更改的不同方法有哪些?

Sql server 2012 使用TFS 2015部署数据库更改的不同方法有哪些?,sql-server-2012,tfs-2015,devops,Sql Server 2012,Tfs 2015,Devops,目前,我们正在CI/CD部署之外手动运行DB脚本(SQL Server 2012)。什么样的方法(包括工具集)可以使用TFS 2015更新3自动部署DB更改?< /P> < P>如果部署DB更改只是使用SQLServer数据库项目(.SQLPROJ文件)与Team Foundation Buin在Team Foundation Server中的意思。 有几种方法可以实现这一点: 使用带有某些参数的MSBuild任务发布SQL项目 在构建期间 在sqlproj文件中添加部署目标,在生成后运行目标

目前,我们正在CI/CD部署之外手动运行DB脚本(SQL Server 2012)。什么样的方法(包括工具集)可以使用TFS 2015更新3自动部署DB更改?< /P> < P>如果部署DB更改只是使用SQLServer数据库项目(.SQLPROJ文件)与Team Foundation Buin在Team Foundation Server中的意思。

有几种方法可以实现这一点:

  • 使用带有某些参数的MSBuild任务发布SQL项目 在构建期间
  • 在sqlproj文件中添加部署目标,在生成后运行目标 完成
  • 或者在构建中添加“批处理脚本”步骤 定义运行“SqlPackage.exe”以发布
    .dacpac
    文件
更多详细信息请参阅此博客:


至于使用TFS2015,您也可以尝试使用任务

使用此任务可将SQL Server数据库部署到现有SQL Server数据库 服务器实例。该任务使用and,这 提供对数据库创建和升级的细粒度控制


如果部署DB更改仅仅是使用SQLServer数据库项目(.SQLPROJ文件)与Team Foundation Buin在Team Foundation Server上的使用。

有几种方法可以实现这一点:

  • 使用带有某些参数的MSBuild任务发布SQL项目 在构建期间
  • 在sqlproj文件中添加部署目标,在生成后运行目标 完成
  • 或者在构建中添加“批处理脚本”步骤 定义运行“SqlPackage.exe”以发布
    .dacpac
    文件
更多详细信息请参阅此博客:


至于使用TFS2015,您也可以尝试使用任务

使用此任务可将SQL Server数据库部署到现有SQL Server数据库 服务器实例。该任务使用and,这 提供对数据库创建和升级的细粒度控制


这里实际上有两种方法,都适用于TFS。实际上,TFS只是促进了用于更新数据库的任何脚本的执行,包括自定义的手工脚本

有一种基于状态的方法,它使用比较技术查看VCS/dev/test/staging数据库,并将其与生产数据库进行比较。Redgate软件的DLM自动化套件可以做到这一点,其他比较工具也是如此。您要做的是使用命令行或编程接口来设置源和目标,捕获输出,然后在发布过程中将其用作工件。我可能会在您的流程中包含对工件的回顾,作为脚本选择

注意,有一些基于状态的比较不能很好地解决的问题。重命名、拆分、合并、数据移动等。有些比较工具有办法解决这个问题,有些则没有。请注意,这可能是一个问题。如果你有一个更成熟的数据库,也许不是,但是你应该考虑这个。SQL源代码管理允许自定义迁移脚本,可以处理这些问题

另一种方法是脚本运行程序或迁移策略,其中您对dev数据库所做的每个更改都被捕获为一个有序脚本,如果需要,框架将按顺序执行这些更改。这是一些人的首选,因为您可以确切地看到在开发和部署时将执行哪些代码。从Redgate软件、Liquibase、Rails迁移、DBUp、FlywayDB,都使用这种策略

这两者都不是好的,也不是坏的。这两种方法都有优点和缺点,但真正的选择取决于你的舒适度和偏好


披露:我为Redgate软件工作。

这里有两种方法,都适用于TFS。实际上,TFS只是促进了用于更新数据库的任何脚本的执行,包括自定义的手工脚本

有一种基于状态的方法,它使用比较技术查看VCS/dev/test/staging数据库,并将其与生产数据库进行比较。Redgate软件的DLM自动化套件可以做到这一点,其他比较工具也是如此。您要做的是使用命令行或编程接口来设置源和目标,捕获输出,然后在发布过程中将其用作工件。我可能会在您的流程中包含对工件的回顾,作为脚本选择

注意,有一些基于状态的比较不能很好地解决的问题。重命名、拆分、合并、数据移动等。有些比较工具有办法解决这个问题,有些则没有。请注意,这可能是一个问题。如果你有一个更成熟的数据库,也许不是,但是你应该考虑这个。SQL源代码管理允许自定义迁移脚本,可以处理这些问题

另一种方法是脚本运行程序或迁移策略,其中您对dev数据库所做的每个更改都被捕获为一个有序脚本,如果需要,框架将按顺序执行这些更改。这是一些人的首选,因为您可以确切地看到在开发和部署时将执行哪些代码。从Redgate软件、Liquibase、Rails迁移、DBUp、FlywayDB,都使用这种策略

这两者都不是好的,也不是坏的。这两种方法都有优点和缺点,但真正的选择取决于你的舒适度和偏好

披露:我在红门软件公司工作