我有一个Web应用程序,我通常直接从Visual Studio使用Web Deploy部署(我目前在VS中使用的任何分支 - 通常是 master )。但是现在我在Azure上引入了第二个Web应用程序,它将使用相同的repo但不同的分支构建。为了简化操作,我将在Azure上配置两个Web应用程序,以便直接与GitHub集成,并将它们与特定分支相关联。
我还添加了另外两个web.config
文件:Web.Primary.config
和Web.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部署期间手动升级数据库。各个脚本实际上正在执行特定的数据库升级步骤:
我以前在我的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的分段功能,但我的应用程序是更便宜的计划,不支持登台和我我希望保持这种方式,因为我可能会在使用其他代码分支和资源(数据库,邮件等)的途中引入其他网络应用程序。
答案 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?