Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 具有持续集成的SQL Server数据库管理_Sql Server_Database_Continuous Integration - Fatal编程技术网

Sql server 具有持续集成的SQL Server数据库管理

Sql server 具有持续集成的SQL Server数据库管理,sql-server,database,continuous-integration,Sql Server,Database,Continuous Integration,假设我们有一个持续集成服务器。当我签入时,post钩子提取最新代码,运行测试,打包所有内容。自动化数据库更改的最佳方法是什么 理想情况下,我会构建一个安装程序,它可以从头开始构建数据库,也可以使用某种自动同步方法更新现有数据库。如果您有机会定义和控制整个数据库管理和数据库创建过程,请认真看一看-它不仅仅是一个工具-它是一个过程 如果您喜欢并能够实现它,您将从中获得巨大的回报——但这是一种“要么全有,要么全无”的方法。推荐使用。最新版本(5.0)的DB Ghost不会出现“非ASCII字符”问题(

假设我们有一个持续集成服务器。当我签入时,post钩子提取最新代码,运行测试,打包所有内容。自动化数据库更改的最佳方法是什么


理想情况下,我会构建一个安装程序,它可以从头开始构建数据库,也可以使用某种自动同步方法更新现有数据库。

如果您有机会定义和控制整个数据库管理和数据库创建过程,请认真看一看-它不仅仅是一个工具-它是一个过程

如果您喜欢并能够实现它,您将从中获得巨大的回报——但这是一种“要么全有,要么全无”的方法。推荐使用。

最新版本(5.0)的DB Ghost不会出现“非ASCII字符”问题(这只是意味着文件是UTF8编码的),它应该能够完全满足您的需要

此外,如果您愿意,这些工具实际上可以单独用于执行各种功能(脚本编写、构建、比较、升级和打包),只是将它们一起使用提供了完整的端到端流程,从而使总体价值大于其各部分的总和

本质上,要对模式进行更改,需要更新在源代码管理下保存的单个对象创建脚本和每个表插入脚本(用于参考数据),就像开发“第一天”绿地数据库一样。DB Ghost工具用于将这些脚本构建到一个全新的数据库中(如果需要,使用持续集成),然后比较和升级一个目标数据库(可以是生产数据库的副本),从而实现整个过程。此过程生成一个增量脚本,可在上线期间在实际生产数据库上使用

您甚至可以生成一个VisualStudio数据库项目,并将其添加到您当前拥有的任何解决方案中


Malc

我要警告不要将db备份用作开发工件,大多数CI最佳实践建议您将模式、过程、触发器和视图作为一级开发工件进行管理。副作用是,您可以更进一步,随时使用它们来构建新的数据库,理想情况下,您还可以将一些数据推送到数据库中

这里有一个cliff notes版本,可以让你的脚湿透,但在这个空间里有很多东西:

我也喜欢Scott Ambler在这里的一些想法,这个网站很好,但这本书对于如此困难的一系列问题有着令人惊讶的深度。

使用SQL源代码管理和SQL Compare Pro命令行的Red Gate方法在这里有详细的代码示例:

Troy Hunt在Simple Talk上写了一篇题为“SQL Server数据库的持续集成”的文章:

Red Gate是一个非常强大的解决方案,它可以开箱即用。 但最好的是,您可以将其与您的持续集成过程集成。我将它与Msbuild和Hudson一起使用。 快速解释其工作原理:


如果您需要了解更多信息,请随时询问您是否看过FluentMigrator?默认下载包括Nant脚本,这些脚本很容易添加到CI中。免费、开源且易于使用。适用于多种数据库

我知道这篇文章很旧,但我们有一个新的解决方案,它采用以下方法:

  • 开发人员编写单个SQL更改的脚本并将其提交给源代码 控制
  • 我们的程序()从中提取更改脚本文件 源代码管理,对它们进行筛选和排序,并生成一个 释放脚本文件
  • 然后将该发布脚本文件应用于 数据库做一个发布
  • 我们的主页更详细地解释了这个过程,并且有一个链接指向一个示例,该示例通过Subversion钩子自动执行这些步骤。在提交后不久,开发人员就会收到一封电子邮件,告知发布是否成功或有错误。其中包括PowerScript代码

    免责声明-我在一家生产OneScript的公司工作。

    我最近遇到过,这可能有用

    作者解释了一些最佳的持续集成实践,包括测试、处理和自动化

    以下是一些关键要点:

    • 在许多商店中,代码在提交时进行单元测试。对于数据库,作为测试步骤的一部分,最好一次按顺序对QA数据库vs development运行所有单元测试
    • 测试步骤是任何CI/CD流程的关键部分。测试脚本,包括单元测试本身,也应该在源代码管理中进行版本控制,在构建步骤中提取并执行
    • 从生产中提取数据作为一种快速的权宜之计很有吸引力,但这绝不是一个好主意
    • 最好的方法是使用工具或脚本为事务表快速、重复和可靠地创建合成测试数据
    • 运行单元测试以生成供人使用的手动摘要结果,这违背了自动化的目的。我们需要机器可读的结果,这可以允许自动化流程中止、分支和/或继续
    • 运行一个CI进程(需要100%的测试才能通过)类似于根本没有CI,如果工作流管道被原子化设置为在失败时停止,那么它应该停止。为了解决这个问题,测试应该具有内置的阈值,这将根据测试失败的百分比或在某些情况下,如果某些高优先级测试失败,将引发错误
    • 所有流程最终都应产生通过或失败的布尔结果,但一些非自动化流程可以很容易地进入CI工作流管道(例如单元测试)。软件应该是任何工作流管道中的即插即用,接收已知的输入并产生预期的输出——如通过、失败
    • CI/CD进程在出现故障时应中止,并且不会发生故障