部署自动化

fla*_*ian 6 deployment scala jetty lift puppet

我有一个Lift应用程序打包为WAR存档,必须在Jetty下部署.但是,我希望能够自动执行一些任务:

  • 指定目标服务器(或服务器集合).我有多个服务器,从开发到测试和生产服务器,我希望能够轻松地控制部署的目的地.
  • 目的地(例如,开发)可以表示服务器的集合,用于负载平衡目的.
  • 测试阶段.基本上,在每个部署中,如果应用程序无法编译或者一个或多个测试失败,我希望运行整个测试集并阻止部署.
  • WAR存档必须在Jetty上部署,再次在一台或多台运行Linux的Amazon EC2机器上部署.(Ubuntu 12.10)

我正在使用SBT,我不知道这将与Puppet或类似的东西有多好.你会怎么做?

Dav*_*ker 5

我一直在看这个问题,希望有人会想出一个聪明的答案.既然他们没有,我想我会在这个问题上表达自己的感受.

据我所知,没有现有工具来自动化这些类型的部署,我认为这是因为有很多不同的场景需要处理.至少,你有:

  1. 单个开发服务器,只需将WAR复制到位,然后重新启动应用服务器即可.
  2. 单个生产服务器,其过程类似,但您不希望该过程中断您的用户.此处的注意事项包括在重新启动期间保留会话数据以及在低使用率的情况下计划重新启动.
  3. 一个小型集群,您可以在许多节点上拥有负载均衡器.现在事情变得复杂了.您可以使用各种不同的LB工具(HA Proxy,NGINX,Amazon的Elastic LB),如果您关心用户体验,则需要协调应用服务器的滚动重启.在节点之间迁移任何会话数据也是一个问题.
  4. 您有一个由不同地理区域中的较小群集组成的大型群集.在这里,您正在处理#3 +以及在区域之间进行协调所需的任何配置.

我想1和2是最容易找到的通用工具,如果这是我需要处理的唯一情况,我可能只是将Jenkins与应用程序一起部署.它可以非常容易地配置,以便在发生更改时从git分支中提取,构建代码并重新启动Jetty.当你到达3和4时,我认为所涉及的不同工具的数量和协调它们的需要已经排除了任何类型的标准解决方案.我不认为这只是Java/Scala世界中的一个问题,因为我已经看过Github人员在他们为管理Rails应用程序部署而构建的自定义工具上的文章.

至于Puppet,我从未使用它的警告,似乎它可能是这种类型的过程的有用工具.你需要某种类型的中央协调器来处理集群,我相信Puppet可以帮助解决这个问题.