问题 多个环境中的Azure云服务项目配置(.csdef和.cscfg)


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

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


11827
2017-07-11 23:09


起源



答案:


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文件更改,它只是没有过于明显它已经完成,并且作为一个继承了这样的东西的人说话,当人们做那种事情并且他们无法告诉时,这并不容易找到你呢。


9
2017-07-14 04:18



我知道我在这里参加派对已经很晚了,但是你是说在Uure云服务中没有构建UAT的概念吗?我们期望在不让产品所有者检查所有东西的情况下直接推销产品?!那太荒谬了,不是吗? - simonlchilds
不,我根本不是这么说的。事实上,我同意你的意见,没有测试和多个环境是一个坏主意。我说没有一点工作,csdef文件是你将遇到的问题,并且必须采取额外的步骤才能使它成为mutli-environment。但是csdef中的内容可能甚至不需要是每个环境的修饰符。大多数连接字符串都在csconfig中。机器大小在csdef中,这是我见过的最常见的需要不同的东西。 - MikeWo
是的,我明白了。只是努力工作才能真正实现天蓝色团队“开箱即用”提供的东西。 - simonlchilds


答案:


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文件更改,它只是没有过于明显它已经完成,并且作为一个继承了这样的东西的人说话,当人们做那种事情并且他们无法告诉时,这并不容易找到你呢。


9
2017-07-14 04:18



我知道我在这里参加派对已经很晚了,但是你是说在Uure云服务中没有构建UAT的概念吗?我们期望在不让产品所有者检查所有东西的情况下直接推销产品?!那太荒谬了,不是吗? - simonlchilds
不,我根本不是这么说的。事实上,我同意你的意见,没有测试和多个环境是一个坏主意。我说没有一点工作,csdef文件是你将遇到的问题,并且必须采取额外的步骤才能使它成为mutli-environment。但是csdef中的内容可能甚至不需要是每个环境的修饰符。大多数连接字符串都在csconfig中。机器大小在csdef中,这是我见过的最常见的需要不同的东西。 - MikeWo
是的,我明白了。只是努力工作才能真正实现天蓝色团队“开箱即用”提供的东西。 - simonlchilds