c# - 自动部署到具有不同 app.config 设置的许多服务器?

标签 c# deployment continuous-integration

我知道 SO 上有很多这样的问题,但到目前为止我还没有找到好的解决方案。我见过的最好的解决方案是自己开发的,但在实现自定义工具之前,我想听听您的看法。所以我们开始吧:

我有一个 .NET 解决方案,其中包含几个 Web 应用程序和一些 Windows 服务。我想自动将这些应用程序部署到 10-20 台不同的服务器 - 但每台服务器上的 app/web.config 文件可能具有不同的值。

Microsoft 对这个问题的回答是在开发机本地有 10-20 个不同的 web.config 文件,然后使用配置管理器选择正确的一个。但这还不够好,因为开发人员不知道生产服务器设置,他们也不应该知道!

理想的解决方案是包括某种“部署模型”,其中定义了生产服务器及其设置,并且可以与某些部署脚本(可以是 Powershell)一起使用构建服务器中的一个步骤(我正在使用 TeamCity)。这可以通过在将解决方案 XCopying 到远程服务器之前替换配置设置来完成。但这是一项乏味且耗时的任务。

另一种解决方案是使用“configSource”指向具有固定名称的文件夹,但这里的问题是配置文件的某些部分(例如serviceModel)不能与configSource一起使用。

所以我还没有找到最好的答案。有什么想法吗?

最佳答案

我们部署模型的一部分(也是一个 TeamCity 集中构建到许多不同的服务器)是自动创建部署脚本作为 MSBUILD 文件的一部分,并围绕 MSDEPLOY/web 部署 2.0 进行部署。

该构建将自动生成适合使用 MSDEPLOY 部署的候选构建,并且还将启动一个 powershell/cmd scriptlet,该脚本将选择适当的配置文件并将其复制到位。

部署到所有服务器就变成了将这些单独的部署脚本串在一起(即使用批处理文件)的情况。由于 MSDEPLOY 仅发送文件更改,因此通常速度非常快,并且可用于备份和部署,因此作为部署脚本的一部分,它将:

  1. 备份适当的服务器(例如 Web1)并将其粘贴到网络共享上
  2. 将适当的包部署到服务器 (Web1),根据需要转换任何文件(例如 Web.Web1.Config -> Web.config)
  3. 写任何必要的日志

构建过程还会吐出一个“撤消”脚本,将适当的服务器恢复到备份。

有关 MSDEPLOY 的更多信息 here .它还可以与数据库等一起使用。

只是一个建议,可能会有帮助:)

关于c# - 自动部署到具有不同 app.config 设置的许多服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8574247/

相关文章:

c# - .net 和工具栏、菜单和状态栏呈现模式(蓝色)和标准形式(灰色)的问题

java - 使用 Eclipse 从部署到 EAR/EJB 模块中排除源目录?

continuous-integration - Jenkins RequireJs Build/CI

Xcode 不再显示来自本地网络的 Xcode Bots/OS X Server

c# - 在 WPF/C# 中显示时区。发现夏令时偏移

c# - 绑定(bind)用户控件的属性 父用户控件的属性 wpf mvvm

django - uWSGI 使用插件 Python36 运行 Python 2 -> 在 Venv 中找不到 Django

node.js - 使用 MongoDB 数据库部署 Node.js API

unit-testing - 是否有人真正成功地在整个团队中使用 MSTest?

java - 如何在java中使用与c#中相同的split方法