使用 VSTS 版本的特定于环境的 EF6 Code First 迁移
Environment specific EF6 Code First Migrations using VSTS Release
我有一个使用 Entity Framework 6.x、ASP .NET WebApi 5.x 的项目。数据访问在解决方案内的辅助项目中。我想使用 VSTS(又名 Visual Studio Online)构建并将其作为网站发布到 integration/dev、质量检查、阶段和生产环境。第 9 频道上有一些很棒的视频处理通用的高级描述。 (例如 https://channel9.msdn.com/Series/DevOps-Release-Management and https://channel9.msdn.com/Series/DevOps-Fundamentals/Infrastructure-as-Code)有各种各样的文章和视频介绍如何从 Visual Studio 内部进行迁移,包括生成脚本。
在网上搜索我什至没有找到任何旧资源或使用代码优先迁移进行持续部署的具体示例。 必须 是自动迁移或 SQL 脚本以外的方法的示例和最佳实践。
我已经配置了 Web 部署包发布配置文件。我通过 PublishProfile
msbuild.exe 指令使用它。该包被添加到项目中,然后由每个发布环境中的 Azure Web 应用程序部署任务部署。但是,一旦构建了这个包,我不知道每次将它发布到环境时更改构建包中的连接字符串的方法。
我可能忽略了一些事情,但是应该如何通过 VSTS 版本完成特定于环境的迁移?
对于Code First Migration,可以"Write App_Start code to run Migrations"或"Write Web.config transforms to configure the MigrateDatabaseToLatestVersion initializer to run",详见本文: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中输入连接字符串。详情参考这个link:http://awaitwisdom.com/publish-profile-config-transform/
我不想在这里回答我自己的问题,但最终我的研究使我得出了我要详细发布的结论 here。在某种程度上,Web.config 和 Parameters.xml 需要一些自定义脚本,这将需要您维护自己的部署自动化。这些路线仍需要您额外创建资源组或手动管理它们。
为了避免这些复杂情况,将工具和脚本拼凑在一起,整个操作可以用两个 JSON files 来实现。这些 JSON 部署模板允许您在部署 运行 时创建或更新资源组。它们还允许您以与通过 Azure 门户相同的方式自动设置覆盖您的 Web.config 值的应用程序设置和连接字符串。
步骤:(1) 添加two JSON files to the project setting the name of you connection string on 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 Deployment 任务中使用相同的网站名称。
这确实取决于让您的代码首先通过 App_Start 或类似方式迁移 运行。我采纳了@Eddie 建议的第一部分,因为 App_Start 很容易处理,而且似乎 运行 不太常见。
作为奖励,您可以为任何此配置添加环境变量,这样您就可以克隆环境,然后只更改变量。这最终会使您的应用程序或 api 连接字符串成为 Release 变量。
我有一个使用 Entity Framework 6.x、ASP .NET WebApi 5.x 的项目。数据访问在解决方案内的辅助项目中。我想使用 VSTS(又名 Visual Studio Online)构建并将其作为网站发布到 integration/dev、质量检查、阶段和生产环境。第 9 频道上有一些很棒的视频处理通用的高级描述。 (例如 https://channel9.msdn.com/Series/DevOps-Release-Management and https://channel9.msdn.com/Series/DevOps-Fundamentals/Infrastructure-as-Code)有各种各样的文章和视频介绍如何从 Visual Studio 内部进行迁移,包括生成脚本。
在网上搜索我什至没有找到任何旧资源或使用代码优先迁移进行持续部署的具体示例。 必须 是自动迁移或 SQL 脚本以外的方法的示例和最佳实践。
我已经配置了 Web 部署包发布配置文件。我通过 PublishProfile
msbuild.exe 指令使用它。该包被添加到项目中,然后由每个发布环境中的 Azure Web 应用程序部署任务部署。但是,一旦构建了这个包,我不知道每次将它发布到环境时更改构建包中的连接字符串的方法。
我可能忽略了一些事情,但是应该如何通过 VSTS 版本完成特定于环境的迁移?
对于Code First Migration,可以"Write App_Start code to run Migrations"或"Write Web.config transforms to configure the MigrateDatabaseToLatestVersion initializer to run",详见本文: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中输入连接字符串。详情参考这个link:http://awaitwisdom.com/publish-profile-config-transform/
我不想在这里回答我自己的问题,但最终我的研究使我得出了我要详细发布的结论 here。在某种程度上,Web.config 和 Parameters.xml 需要一些自定义脚本,这将需要您维护自己的部署自动化。这些路线仍需要您额外创建资源组或手动管理它们。
为了避免这些复杂情况,将工具和脚本拼凑在一起,整个操作可以用两个 JSON files 来实现。这些 JSON 部署模板允许您在部署 运行 时创建或更新资源组。它们还允许您以与通过 Azure 门户相同的方式自动设置覆盖您的 Web.config 值的应用程序设置和连接字符串。
步骤:(1) 添加two JSON files to the project setting the name of you connection string on 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 Deployment 任务中使用相同的网站名称。
这确实取决于让您的代码首先通过 App_Start 或类似方式迁移 运行。我采纳了@Eddie 建议的第一部分,因为 App_Start 很容易处理,而且似乎 运行 不太常见。
作为奖励,您可以为任何此配置添加环境变量,这样您就可以克隆环境,然后只更改变量。这最终会使您的应用程序或 api 连接字符串成为 Release 变量。