SQL部署自动化



我正在尝试使用Jenkins自动化现有的SQL Server数据库部署自动化。

自动化的方法之一是使用Visual Studio在SQL Server数据库项目中包括SQL脚本(存储过程,视图,表创建(。使用msbuild使用sqlpackage.exe构建项目并部署DACPAC。但是,现有数据库具有对存储过程/视图中的其他数据库的引用,因此我在SQL Server数据库项目中有其他数据库。此外,在提取现有数据库的DACPAC时,我会遇到很多错误。我认为这是由于现有代码不是DACPAC兼容的,并且可能需要更改才能兼容。

是否有其他方法可以自动化SQL Server代码部署,而不是使用SQL Server数据库项目?

ssdt是一个不错的选择,但是您和所有开发人员都需要一段时间才能习惯它,并了解什么是离线开发和基于州的部署。您可以阅读SSDT如何独自工作,但是很少有建议:

  • 对于您的查询中涉及的每个数据库,您都需要创建项目
  • 如果您在代码中使用其他数据库,则应该将该项目添加为参考
  • 代替代码(server.database.schema..name或database.schema.name(中的3/4个零件名称为每个对象创建同义词,而在同义词中使用Server和数据库名称的同义词
  • 不要将登录,用户和权限放入该项目
  • 创建发布个人资料并仔细查看所有设置(例如,将用户,登录,权限等等范围排除(
  • (
  • 有一些预/帖子脚本,您可以在其中创建一些解决方法

主要是人们害怕使用SSDT进行全自动部署,因为该脚本是自动生成的,并且对最终部署脚本只有非常限制的控制(公平地说,您可以使用部署贡献者几乎可以控制所有内容,但是它是另一个讨论的主题(。通常,脚本生成和部署之间存在脚本评论步骤。

所以,如果您坚持使用SSDT,则为您的roardmap是:

  • 为代码中使用的所有数据库创建项目
  • 创建来自项目中所有对象的同义词,这些对象来自其他数据库,其中变量为数据库和实例名称(非常重要的一点(
  • 在所有外部数据库和实例上使用多个文件替换

提示要替换。代码中的对象名称有几种组合:

  • instance.database.schema.Object
  • instance.database..Object
  • 实例...对象
  • 所有其他与[]或"的组合,例如[dbo]。

因此,您可以做的是用 $(instanceName( instance 在所有文件中替换 [database]

基于SSDT模型项目的替代方法是此处讨论的迁移脚本方法。

基于模型的部署需要在构建过程中验证依赖项,否则您将在部署期间承担错误的风险。不幸的是,我不知道为其他不友好的参考数据库创建DACPAC,而不会努力为从源构建的引用数据库创建单独的项目。您可以为引用数据库创建一个数据库项目,并使用SSDT导入向导提取数据源代码的数据库并清理解决方案。

此任务的复杂性将取决于您拥有的跨数据库和跨性别依赖性的数量。为了避免循环参考,可能有必要将数据库分为单独的项目。

最新更新