【问题标题】:Azure cloud service project configuration (.csdef and .cscfg) in multiple environments多个环境中的 Azure 云服务项目配置(.csdef 和 .cscfg)
【发布时间】:2013-07-10 09:55:22
【问题描述】:

目前我们有一个开发云服务(acme-dev-service)和一个生产云服务(acme-prod-service)。我们解决方案中的当前设置有一个名为 acme.application 的云服务项目,它使用 .cscfg 和 .csdef 文件的转换将项目部署到两个环境(生产和开发)。我不喜欢这种转换方法,因为它对我来说有点像黑客。因此,在做了一些研究之后,您似乎可以拥有多个配置文件来解决一些问题,但我遇到了问题,因为您只允许一个服务定义。这对我们不起作用,因为生产环境需要额外的证书以及与我们的开发环境不同的 hostHeader 绑定。

所以看来我们真的无法摆脱使用转换。所以我想我的问题归结为我是否以错误的方式查看 Azure 服务项目文件?我们真的应该将一个 Azure 项目映射到一个 Azure 云服务吗?我应该有一个用于生产的 Azure 项目和另一个用于开发的 Azure 项目吗? 有一个更好的方法吗?还是在 Azure 中使用多个环境的最佳实践?

【问题讨论】:

    标签: azure cloud virtual-machine cloud-hosting


    【解决方案1】:

    CSDefinition 文件是真正的关键。如果您有一个值需要在两个环境(开发/测试/阶段/生产等)之间有所不同,那么您实际上有三个选择:

    1) 在部署之前手动修改值。呃……好吧……你有两个选择。

    1) 进入 MS Build 流程并确定您选择了哪个云配置(用于确定将使用哪个版本的 .cscfg 文件的配置),然后让构建在构建之后和之前修改 .csdef打包(有时文件在打包之前已复制到不同的目录,这是您要进行更改的地方)。这可能很棘手,尽管我已经看到它完成了,甚至在早期的 SDK 时代我自己也这样做过。这是一篇博客文章,解释了他使用 WebConfigTransformRunner 来做到这一点的一个例子:http://fabriccontroller.net/blog/posts/apply-xdt-transforms-to-your-servicedefinition-csdef-file/。我真的不认为这是你最好的选择,因为它是不透明的。目前尚不清楚发生了什么,并且在您维护代码之后出现的人将不知道这个小宝石,并且将永远试图弄清楚为什么他们在某处放入 csdef 的某些值在发布到后会以某种方式被覆盖不同的环境。

    2) 使用您提到的两个 Azure Project 方法。你可以在选择的生成工具中设置生成定义,以确定要生成和发布的 Azure 项目。我个人认为这是处理不同 .csdef 文件的最佳方式。这很简单,不需要修改 csproj 文件。我不反对更改 csproj 文件,只是它已经完成并不太明显,而且作为一个继承了类似东西的人来说,当人们做那种事情并且他们不在身边告诉的时候并不容易找到你关于它。

    【讨论】:

    • 我知道我在这里聚会迟到了,但是你是说 Azure 云服务中没有内置 UAT 的概念吗?我们应该在不让产品所有者检查所有内容的情况下直接推动产品?!这很可笑,不是吗?
    • 不,我不是这么说的。事实上,我同意你的观点,没有测试和多个环境是个坏主意。我的意思是,如果不做一点工作,csdef 文件就是你会遇到的问题,并且必须采取额外的步骤才能使其成为多环境。但是 csdef 中的内容可能甚至不需要每个环境的修饰符。大多数连接字符串等都在 csconfig 中。机器大小在 csdef 中,这是我见过的最常见的需要不同的地方。
    • 是的,我明白了。感觉就像是努力工作才能实现真正应该由 azure 团队“开箱即用”提供的东西,恕我直言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2015-08-14
    • 2017-09-25
    • 2012-07-17
    • 2016-04-08
    • 1970-01-01
    相关资源
    最近更新 更多