【问题标题】:Environment specific EF6 Code First Migrations using VSTS Release使用 VSTS 版本的特定于环境的 EF6 代码优先迁移
【发布时间】:2016-04-16 07:04:03
【问题描述】:

我有一个使用 Entity Framework 6.x、ASP .NET WebApi 5.x 的项目。数据访问位于解决方案内的辅助项目中。我想使用 VSTS(又名 Visual Studio Online)来构建和发布它作为集成/开发、质量保证、阶段和生产环境的网站。第 9 频道上有一些很棒的视频,它们处理通用的高级描述。 (例如https://channel9.msdn.com/Series/DevOps-Release-Managementhttps://channel9.msdn.com/Series/DevOps-Fundamentals/Infrastructure-as-Code)关于如何从Visual Studio 内部进行迁移(包括生成脚本)有各种各样的文章和视频。

在网上搜索时,我什至找不到任何旧资源或使用代码优先迁移进行持续部署的具体示例。对于自动迁移或 SQL 脚本以外的方法,必须提供示例和最佳实践。

我已经配置了一个 Web 部署包发布配置文件。我通过PublishProfile msbuild.exe 指令使用它。该包被添加到工件中,然后由每个发布环境中的 Azure Web 应用部署任务进行部署。但是,一旦构建了这个包,我不知道每次将它发布到环境时更改构建包中的连接字符串的方法。

我可能忽略了一些事情,但是应该如何通过 VSTS Release 完成特定于环境的迁移?

【问题讨论】:

  • 我在用户语音中发现了这个:j.mp/1PAQXjJ 这似乎表明正在为此做一些事情?

标签: entity-framework entity-framework-6 azure-devops ms-release-management


【解决方案1】:

对于代码优先迁移,您可以“编写 App_Start 代码以运行迁移”或“编写 Web.config 转换以配置要运行的 MigrateDatabaseToLatestVersion 初始化程序”,详细信息请参阅本文:http://blogs.msdn.com/b/webdev/archive/2014/04/09/ef-code-first-migrations-deployment-to-an-azure-cloud-service.aspx

对于使用配置文件的连接字符串转换,您需要为发布配置文件添加一个web.config文件,然后在这个web.config中输入连接字符串。详情参考此链接:http://awaitwisdom.com/publish-profile-config-transform/

【讨论】:

  • 将 web.config 与发布配置文件一起使用的问题是我想遵循在每个环境中使用相同位的做法。因此,我只有一个 Web 部署包配置文件。如果我的想法正确,我是否不必为每个“环境”都有一个单独的发布配置文件?
  • @DrydenMaker 你能解释更多细节吗? Web.config 可以通过配置文件或配置进行转换。您的意思是您希望 web.config 通过配置而不是配置文件进行转换?
  • 当然。这可能只是我对 VSTS 构建和发布缺乏了解。我在“构建”中有一个步骤,它创建所有程序集并将它们作为工件发布。它还创建部署包。我想在我的所有环境(开发、集成、质量保证、uat、生产)中使用这个精确的部署包。问题是使用环境的正确连接字符串触发迁移。
  • @DrydenMaker 得到它。然后您可以使用参数化来执行此操作。详情见此链接:vishaljoshi.blogspot.com/2010/07/…
  • 我会在接下来的几天里尝试这个,我会告诉你进展如何。
【解决方案2】:

我不想在这里回答我自己的问题,但最终我的研究得出了我在here 详细发布的结论。总而言之,Web.config 和 Parameters.xml 需要一些自定义脚本,这将需要您维护自己的部署自动化。这些路由仍然需要您另外创建资源组或手动管理它们。

为了避免这些复杂性和将工具和脚本拼凑在一起,整个操作可以通过两个JSON files 来实现。这些 JSON 部署模板允许您在部署运行时创建或更新资源组。它们还允许您以与通过 Azure 门户相同的方式自动设置覆盖 Web.config 值的 appsettings 和连接字符串。

步骤:(1) 将two JSON 文件添加到项目中,在line 88 上设置连接字符串的名称 (2) 将Azure 资源组部署任务添加到发布环境. (3)在任务中设置模板(WebSite.json)和模板参数(WebSite.parameters.json)路径。 (4) 将 Override Template 参数设置为 -hostingPlanName "myHostingPlan" -webSiteName "myWebsiteName" -connectionString "the-actual-connection-string" (5) 确保您在 Azure 应用部署任务中使用相同的网站名称。

这确实取决于让您的代码首先迁移通过 App_Start 或类似的方式运行。我接受了@Eddie 建议的第一部分,因为 App_Start 很容易处理,而且似乎不经常运行。

作为奖励,您可以为任何此配置添加环境变量,这样您就可以克隆环境,然后只需更改变量。这最终使您的应用程序或 api 连接字符串成为 Release 变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多