将相同的 Azure 二进制文件部署到多个订阅

Deploy the same Azure binaries to multiple subscriptions

我们正在尝试使用 TFS、Visual Studio 和 Azure 制定良好的连续部署设置。在我们公司,每个开发人员都有自己用于测试的 Azure 订阅,以及我们可以部署到的共享 QA1/QA2/PROD 订阅。我们为其中的每个匹配了 TFS XAML 构建定义,运行 带有参数和 PublishSettings 文件的 Powershell 脚本。

这一切都为我们提供了一组 .cspkg 和 .cspkg 文件,理论上我们可以将正确的 cspkg 与正确的 cspkg 部署到任何 Azure 系统。

我们现在遇到的问题是我们想开始使用Redis Cache服务。安装 nuget 包会将特定于订阅的设置写入 web.config,以指向缓存。这意味着现在专门为 Azure 订阅编译了 cspkg。

我们可以使用 SlowCheetah 在构建时合并 web.config 个文件,但这意味着我们必须为每个构建定义编译包,并且随着开发人员数量的增加,这显然会变得不可持续.

我正在寻找一种方法来保留我们的旧通用包并仍然使用 Redis 缓存。我们可以在 app_start 期间在代码中连接到缓存,但之后我们不能使用它来存储 IIS 会话状态。我知道 Azure 负载均衡器旨在让用户保持在同一台服务器上,但我不确定在我们交换服务器时它会如何工作 in/out。

感觉我们处理问题的方式不对,应该有一个我们忽略的简单解决方案。

我们正在使用 Azure Tools 2.6,Visual Studio 2013,TFS 2015r2。

我认为总有 3 种方法可以做到这一点。

第一个是构建过程中的配置,即为您描述的一件事构建一件事,这在大多数情况下都是不需要的。

第二个是部署时的config,就是打开cspkg文件,修改config,然后上传前放回去,不用重新编译。

第三是部署后的配置,有一个配置管理工具为你即时调整配置文件。

我们使用 octopus deploy 来归档上面的 #2,我们的 CI 工具用 cspkg 和 cscfg 喂养章鱼,其余的由章鱼处理。我绝对不会追求#1,但考虑#3 也是一个有效的选择。

从今天开始,我们将所有连接设置存储在 .cscfg 文件中。即使出于安全原因,我们也避免在源代码管理中存储任何生产连接字符串,只有 QA。我们有 CI 用于 QA,但没有生产。这种方式对我们来说效果很好,我们只是为不同的环境(订阅)维护不同的 .cscfg

但是,我想在不久的将来我们会为此转移到 Key Vault。