2015-05-22 83 views
1

我有一个Web应用程序,我通常使用Web部署直接从Visual Studio(无论我目前在VS中使用的分支 - 通常)。但现在我介绍了Azure上的第二个Web应用程序,该应用程序将从相同的回购,但不同的分支构建。为了简单起见,我将在Azure上配置两个Web应用程序,以直接与GitHub集成并将它们与特定的分支相关联。从GitHub和数据库升级Azure连续部署

我还添加了两个额外的web.config文件:Web.Primary.configWeb.Secondary.config和配置应用程序设置上的每个Web应用程序的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脚本,我在我的回购库中使用了在VS Web Deploy期间手动升级数据库。单个脚本实际上是做具体的数据库升级步骤:

  1. 备份当前表 - 备份创建一组从现有的复制,并与现有的数据填充
  2. 下降整个DB模式Backup_OriginalTableName表 - 所有非备份对象正在从过程,函数,类型,视图,表...下降
  3. 创建模型 - 创建所有表,视图和索引
  4. 创建用户类型
  5. 创建用户功能
  6. 创建存储过程
  7. 将数据恢复到备份表中的新表 - 如果我们在新模型中向表中引入了新的不可为空列,那么此步骤可能偶尔会中断,但没有在其中定义默认值;我将不得不通过添加一个额外的脚本来缓解这个问题,该脚本会将缺失的列添加到备份表并给它们一些默认值,但这是一个完全不同的问题。

我曾经也有一组我的VS解决方案,简单地执行sqlcmd针对特定数据库实例和执行预定义的次序这些脚本(如上)批处理文件(BAT)。因此,我不得不批:

  • Recreate Local.bat - 这一个用于额外的SQL脚本不从备份中恢复,而是重新与被填充仅查找表的空数据库并用于开发目的的一些默认数据(如预定义的测试用户)
  • Restore Local.bat - 我用这个脚本简单地恢复从丢弃任何无效数据备份数据表数据库中,我可能已经创建了一段时间的调试/测试最后DB重新创建/升级/还原
  • Upgrade Local.bat - 升级上面
  • 提到当地的发展DB执行脚本
  • Upgrade Production.bat - 在Azure上执行上述

提到所以要支持整个部署过程,现在我在做手工VS我现在想持续部署过程中也执行针对特定Azure的SQL数据库这些脚本,脚本提升生产DB。我想我应该在代码部署后立即运行它们,因为如果那个失败了,DB也不应该升级。

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

也许这只是我的过程,是错误的DB升级/部署,以便让我也知道,如果有,做与Azure的持续部署......我可以改变我的过程DB升级/迁移任何其他正常方式以适应这一点。

注1:我不使用实体框架或任何其他完全成熟的ORM。我宁愿使用NPoco,而我所有的DB逻辑都是在DAL使用的SP中构建的。

注2:我所知道的天青最近推出的升级能力,但我的应用程序上不支持分期便宜的计划,我想保持下去,因为我可能会引入额外的沿将使用额外的代码分支和资源(DB,邮件等)方式的网络应用程序

回答

1

这听起来好像你的数据库项目是一个很好的候选人SSDT和融入源控制。您可以创建一个MyDB.sqlproj,将您的数据库构建为一个dacpac,然后您可以使用SqlPackage.exe Publish完成Azure的部署。

我们最近将我们的数据库引入了源代码管理,并遵循类似的流程来构建和自动部署它们(但不是SQL Azure DB)。我们发现源代码管理,SSDT工具支持和自动部署选项值得我们用这种方式来设置和维护我们的项目。

这太问题具有使用SSDT的dacpac的Azure的部署一些很好的说明:

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