【问题标题】:Azure Web Role configuration settings across environments跨环境的 Azure Web 角色配置设置
【发布时间】:2013-07-01 05:24:52
【问题描述】:

在 Azure 之前发布:

在使用 Azure 之前,我们只有位于不同环境(测试、暂存和生产等)中的只读配置文件。在发布期间,所有应用程序文件(无配置文件)都将部署到相关环境中。然后,应用程序文件将读取环境的配置文件以获取连接字符串和其他特定于环境的详细信息。我认为这是一个非常标准的设置?

在 Azure 之后发布:

现在我们正在将 Web 应用程序迁移到 Azure Web 角色。 Web 角色使用 ServiceConfiguration.Cloud.cscfgServiceConfiguration.Local.cscfg 文件。

发布到云服务时,需要知道连接字符串。如果我们要发布到测试云服务,则需要对ServiceConfiguration.Cloud.cscfg 进行相应的编辑。如果我们要发布到暂存或生产云服务,则需要进一步更改 ServiceConfiguration.Cloud.cscfg

我更愿意在开发人员进行部署时将他们从连接字符串中抽象出来。这可以防止错误指向不正确的环境(这可能会产生巨大的影响)。如何做到这一点?

我了解可以在 Azure 管理门户中更改这些配置设置,但是将此步骤包含在发布过程中意味着开发人员需要访问管理门户,这不是一个理想的情况,因为仍然有错误的余地(加上对管理门户的“开放”访问)。

更新:

我发现您可以通过添加更多(和重命名)来管理您的服务配置文件:

然后通过一起选择正确的云服务(黑色)和正确的服务配置(红色箭头),开发人员无需了解配置细节:

仍然存在开发人员在部署到云服务时选择错误的服务配置的问题(但也许这可以自动写入脚本以防止这种情况发生?)

我的主要问题是环境类型(蓝色箭头)。这对我现在没有用了。

【问题讨论】:

  • 我必须检查一下,但我认为这只允许您选择配置而不是服务定义。因此,如果您想要不同的端点(http 与 https)、不同的 Vm 大小或环境之间的其他端点,您可能会遇到问题。我的答案中的解决方案就是这样做的。
  • @Eoin:哦,是的,关于服务定义的要点。这将是一个问题。最后一个问题:您是否能够在没有“部署包”的情况下对代码进行版本控制。直接从 Visual Studio 发布有点吓人,因为您无法确定代码是否已更改。
  • 在我们的例子中,我们的源代码是否存储在 GitHub 上,我们用于源代码控制,所以我们有自己的流程来建立一个分支,锁定发布内容,然后移动在Master上进行开发。当需要进行生产版本时,我们只需从我们签署的分支进行部署。

标签: .net azure azure-web-roles azure-configuration web.config-transform


【解决方案1】:

最好的办法是创建多个云部署项目,每个环境一个,这样每个项目都有不同的 ServiceConfiguration。

在我的应用程序中,我有 3 个应用程序项目(1 个 WebRole 和 2 个 Worker Role)

然后我们有 6 个云部署项目,每个目标环境一个。每个部署项目都包含相同的 Web Role 和 Worker Roles,但具有不同的 cscfgcsdef 文件。

在应用程序级别,app.config 和 web.config 文件通过使用 SlowCheetah 的配置转换进行处理。基本上,对于每个部署,您在配置管理器中都有不同的构建配置。所以我有DebugQAUatTestSAndboxProduction,而不只是DebugRelease

【讨论】:

  • 感谢您的帖子。拥有单独的项目绝对是一种解决方案。请查看我的帖子以获取更新(另一种可能的解决方案)。另外,您现在如何处理内置于云服务中的生产/暂存环境?
  • 生产与暂存是 Azure 的内部预生产节点,因此您可以利用 VIP 交换选项。但是,如果每个环境都有完全不同的环境,您可能总是可以部署到相关环境的“生产”持有者。
猜你喜欢
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 2012-07-17
相关资源
最近更新 更多