从GitHub进行Azure持续部署和数据库升级

时间:2015-05-22 07:11:24

标签: database git azure continuous-deployment

我有一个Web应用程序,我通常直接从Visual Studio使用Web Deploy部署(我目前在VS中使用的任何分支 - 通常是 master )。但是现在我在Azure上引入了第二个Web应用程序,它将使用相同的repo但不同的分支构建。为了简化操作,我将在Azure上配置两个Web应用程序,以便直接与GitHub集成,并将它们与特定分支相关联。

我还添加了另外两个web.config文件:Web.Primary.configWeb.Secondary.config,并在每个网络应用的Azure门户上配置了应用设置,方法是添加其他值SCM_BUILD_ARGS并将其设置为

SCM_BUILD_ARGS=-p:PublishProfile=Primary // in primary web app
SCM_BUILD_ARGS=-p:PublishProfile=Secondary // in secondary web app

我理解将使用特定的外部服务配置(数据库连接,邮件服务器等)转换正确的配置文件

现在,我希望在持续部署中包含的附加步骤是运行一组SQL脚本,我在我的repo中用于在VS中的Web部署期间手动升级数据库。各个脚本实际上正在执行特定的数据库升级步骤:

  1. 备份当前表 - backup创建一组Backup_OriginalTableName表,这些表从现有表中复制并填充现有数据
  2. 删除整个数据库模型 - 从程序,函数,类型,视图,表中删除所有非备份对象......
  3. 创建模型 - 创建所有表格,视图和索引
  4. 创建用户类型
  5. 创建用户功能
  6. 创建存储过程
  7. 将数据从备份表还原到新表 - 如果我们向新模型中的表引入新的非可空列而没有在其上定义默认值,则此步骤可能偶尔会中断;我将以某种方式通过添加一个额外的脚本来缓解这个问题,该脚本会将缺少的列添加到备份表并为它们提供一些默认值,但这是一个完全不同的问题。
  8. 我以前在我的VS解决方案中也有一组批处理文件(BAT),它只针对特定的数据库实例执行sqlcmd并按预定顺序执行这些脚本(如上所述)。因此,我有批次:

    • Recreate Local.bat - 这个使用了额外的SQL脚本无法从备份恢复,而是重新创建一个空数据库,只填充查找表和一些用于开发目的的默认数据(如预定义测试用户)
    • Restore Local.bat - 我使用此脚本简单地从备份表恢复数据库,丢弃自上次数据库重新创建/升级/恢复以来调试/测试时我可能创建的任何无效数据
    • Upgrade Local.bat - 升级上面提到的本地开发数据库执行脚本
    • Upgrade Production.bat - 在Azure上执行上面提到的脚本升级生产数据库

    所以为了支持我现在在VS中手动完成的整个部署过程,我现在还希望在持续部署期间针对特定的Azure SQL DB执行这些脚本。我想我应该在代码部署之后立即运行这些,因为如果那个失败,DB也不应该升级。

    我有点困惑在哪里以及如何做到这一点?我可以在Azure门户中的某个位置配置它吗?我正在寻找Web上的资源,但我似乎无法找到任何相关信息如何执行其他部署步骤来执行这些脚本。我认为这是一些日常情况,因为很难想象这些天不需要数据库的网络应用程序。

    也许只是我的进程对于数据库升级/部署是错误的,所以让我也知道是否有任何其他正常方式在Azure上进行数据库升级/迁移并持续部署...我可能会改变我的流程以适应这一点。

      

    注1 :我没有使用Entity Framework或任何其他完整的ORM。我宁愿使用NPoco,我所有的DB逻辑都是在DAL使用的SP中构建的。

         

    注意2 :我知道最近推出了Azure的分段功能,但我的应用程序是更便宜的计划,不支持登台和我我希望保持这种方式,因为我可能会在使用其他代码分支和资源(数据库,邮件等)的途中引入其他网络应用程序。

1 个答案:

答案 0 :(得分:1)

听起来像你的db项目是SSDT的一个很好的候选者并且包含在源代码控制中。您可以创建一个将数据库构建为dacpac的MyDB.sqlproj,然后使用SqlPackage.exe Publish完成对Azure的部署。

我们最近将数据库置于源代码控制之下,并按照类似的流程构建并自动部署它们(但不是SQL Azure数据库)。我们发现源代码控制,SSDT工具支持和自动部署选项值得以这种方式设置和维护我们的项目。

这个SO问题对使用SSDT的Azure部署dacpac有一些很好的说明:

How to publish DACPAC file to a SQL Server database project via SQLPackage.exe of SSDT?