我知道 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 仅发送文件更改,因此通常速度非常快,并且可用于备份和部署,因此作为部署脚本的一部分,它将:
- 备份适当的服务器(例如 Web1)并将其粘贴到网络共享上
- 将适当的包部署到服务器 (Web1),根据需要转换任何文件(例如 Web.Web1.Config -> Web.config)
- 写任何必要的日志
构建过程还会吐出一个“撤消”脚本,将适当的服务器恢复到备份。
有关 MSDEPLOY 的更多信息 here .它还可以与数据库等一起使用。
只是一个建议,可能会有帮助:)
关于c# - 自动部署到具有不同 app.config 设置的许多服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8574247/