我们有一个需要自动部署到多个服务器的新应用程序。我需要知道 Puppet 是否可以用于以下场景。
应用程序
该应用程序是 .NET 和 PHP 与 SQL Server 或 PostGRE 数据库的组合。首次启动应用程序时,使用实体框架在 C# 中处理数据库迁移。该应用程序尚未完成,但我正在研究使部署自动化的可行性研究。
构建和持续集成
我们使用云中的 Team Foundation Service (TFS) 进行构建。
目标环境
该应用程序将安装在云端和客户的基础设施内部。云平台将由我们控制,所以我想这并不难。我可以看到 Puppet 对配置该环境的好处。
但是,当服务器由客户端的基础架构托管时,我可能无法过多地控制对服务器的访问。我必须假设服务器只能访问端口 443(和 80,但我不会那样更新软件)。我想我们将拥有对我们需要安装的任何服务器的管理员访问权限,我更关心的是通过公司防火墙访问服务器。
环境将是用于 .NET Web 和数据库服务器的 Server 2008 (IIS7),也可能是运行 Apache for PHP 的 linux 服务器。由于应用程序尚未完成,我还不能确定 PHP 的限制是什么。我假设我必须部署到两种不同类型的服务器。
部署环境
将有一台服务器用于编排部署。Puppet / 任何其他技术都可以在这里安装。
想要的过程
请原谅我在这里大量使用 Puppet。我不确定它开箱即用的局限性,我很欣赏有一个 Forge 可以使用很多插件。这种自动化水平对我来说是新的,所以我很乐意就我的步骤获得反馈!
- TFS 构建完成,单元测试运行并且构建被标记为 OK。
- Puppet 发现有一个新版本并抓住了包裹
- Puppet 配置立即将新包部署到集成测试服务器(云)
- Puppet 在集成测试服务器上启动 MSBuild
- 完成后,Puppet 会更新 TFS 构建的状态
- 客户端服务器上的 Puppet Agent 然后下载新包(通过 SSL 拉取)
- Puppet 等待分配的时间来安装系统(假设此时没有系统管理员醒着!)
- Puppet 在数据库中设置一个标志,所有 Web 客户端都在轮询该标志以检查“关闭消息”
- Puppet 等待分配的时间(让用户保存他们的工作)
- Puppet 将 IIS/Apache 站点重新指向维护页面
- Puppet 开始备份代码和数据库
- Puppet 在 Linux 和 Windows 服务器上执行软件包安装、配置更新。
- Puppet 触发冒烟测试(.NET 控制台应用程序)并等待完成
- 如果成功,Puppet 会重新指向 IIS/Apache
- 如果不成功,Puppet 将回滚 Windows 和 Linux 服务器。
- Puppet 在数据库中设置标志,表示系统再次运行
- Puppet 向服务器报告。
假设
- 不会有负载平衡,因此只有一台 .NET 服务器和一台 Linux 服务器。将来可能需要这样做,但可能是 YAGNI。