5

我们有一个需要自动部署到多个服务器的新应用程序。我需要知道 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 可以使用很多插件。这种自动化水平对我来说是新的,所以我很乐意就我的步骤获得反馈!

  1. TFS 构建完成,单元测试运行并且构建被标记为 OK。
  2. Puppet 发现有一个新版本并抓住了包裹
  3. Puppet 配置立即将新包部署到集成测试服务器(云)
  4. Puppet 在集成测试服务器上启动 MSBuild
  5. 完成后,Puppet 会更新 TFS 构建的状态
  6. 客户端服务器上的 Puppet Agent 然后下载新包(通过 SSL 拉取)
  7. Puppet 等待分配的时间来安装系统(假设此时没有系统管理员醒着!)
  8. Puppet 在数据库中设置一个标志,所有 Web 客户端都在轮询该标志以检查“关闭消息”
  9. Puppet 等待分配的时间(让用户保存他们的工作)
  10. Puppet 将 IIS/Apache 站点重新指向维护页面
  11. Puppet 开始备份代码和数据库
  12. Puppet 在 Linux 和 Windows 服务器上执行软件包安装、配置更新。
  13. Puppet 触发冒烟测试(.NET 控制台应用程序)并等待完成
  14. 如果成功,Puppet 会重新指向 IIS/Apache
  15. 如果不成功,Puppet 将回滚 Windows 和 Linux 服务器。
  16. Puppet 在数据库中设置标志,表示系统再次运行
  17. Puppet 向服务器报告。

假设

  • 不会有负载平衡,因此只有一台 .NET 服务器和一台 Linux 服务器。将来可能需要这样做,但可能是 YAGNI。
4

1 回答 1

-1

对于客户端基础结构,我会使用 Windows Installer MSI 对产品进行收缩包装。TFS 云构建服务器上有 Windows Installer XML,您可以使用它来构建您的安装程序。

将安装程序交付给客户并让其完成所有工作。就像从 MSDN 下载 TFS 并将其安装在本地服务器上一样。

您还可以在网站上发布 MSI,并使用客户端上运行的自动更新模式将其拉下并执行。

于 2013-09-26T20:11:37.907 回答