部署自动化

7
我有一个Lift应用程序,打包成WAR文件必须在Jetty下部署。然而,我希望能够自动执行一些任务:
  • 指定目标服务器(或一组服务器)。我有多个服务器,从开发到测试和生产服务器,我希望能够轻松地控制部署的目的地。
  • 目的地(例如DEVELOPMENT)可能意味着一组服务器,用于负载均衡。
  • 测试阶段。基本上,在每次部署时,我都想运行整个测试集,并防止应用程序不能编译或一个或多个测试失败而进行部署。
  • WAR归档文件必须在Jetty下部署,再次在运行Linux的一个或多个Amazon EC2机器上。(Ubuntu 12.10)

我正在使用SBT,不知道它是否与Puppet或类似工具兼容。您会如何处理这个问题?

4个回答

5
我一直在关注这个问题,希望有人能想出一个聪明的答案。但由于没有人回答,我想我会谈谈自己对这个问题的看法。
据我所知,目前不存在自动化这些部署过程的工具,我认为这是因为需要处理的情况非常多。至少,你需要考虑以下几种情况:
1. 单个开发服务器,只需将WAR文件复制到指定位置并重启应用服务器即可。 2. 单个生产服务器,过程类似,但您不希望该过程影响到用户。在此情况下,需要考虑保留跨重启的会话数据,并在低使用率时间计划重启。 3. 小型集群,其中有许多节点上有负载均衡器。现在事情变得非常复杂。您可能正在使用各种不同的LB工具(HA代理、NGINX、Amazon的弹性LB),如果您关心用户体验,您需要协调应用服务器的滚动重启。迁移节点之间的任何会话数据也是一个问题。 4. 您拥有一个大型集群,其中包含不同地理区域的小型集群。在这里,您需要处理第3点以及协调不同地区之间的配置需求。
我认为1和2是最容易找到通用工具的情况,如果这些是我需要处理的唯一情况,我可能会使用Jenkins部署应用程序。它可以很容易地配置为在发生更改时从git分支中提取代码,构建代码并重新启动Jetty。但是当你到达3和4时,我认为涉及的不同工具数量以及协调它们的需要已经排除了任何标准解决方案。我认为这不仅是Java / Scala世界的问题,因为我已经看到Github团队关于管理Rails应用程序部署的自定义工具的写作。
至于Puppet,我从未使用过,但它似乎可以成为这种类型流程的有用工具。您将需要某种集中协调器来处理群集,我相信Puppet可以帮助实现这一点。

1
您可以使用我们的产品BuildMaster来完成所有这些事情。我注意到您提到了Puppet,值得注意的是,该工具旨在用于基础架构自动化,而不是软件部署和交付。
在 DevOps 领域工作中,我们发现通过团队协作(开发人员不是运维人员,反之亦然)保持软件和基础架构部署正交同步非常重要。
针对您提出的几点问题:

部署到多个服务器

创建自动化部署计划时,您可以指定一个服务器组,并根据需要添加/删除服务器。

测试阶段

您可以在生产之前设置任意数量的测试环境,并且这些工作流程可以包括自动检查(即促销要求),以确保在允许将构建推广到下一个环境之前通过测试。内置的测试主要用于确保 Unit Tests 的通过,但您可以为任何命令行工具输出指定它们,甚至编写自定义扩展程序。

Jetty 部署

只需使用 SSH 代理将 WAR 文件部署到服务器即可完成文件复制。

0

关注了这个问题。

实际上有同样的感觉:你无法考虑所有可能的环境,框架只允许你选择你想要的。所以,选择任何令人愉悦的部署工具并使用它。

(当然,SBT允许您测试、防止打包,并且有很多部署工具对WAR和Jettyies有了解)。


0

这是一个典型的DevOps场景。我认为Jenkins将通过添加一些开源插件来获得更多对作业的控制,如“CloudBees Build Flow”和“Node and Label parameter”,从而帮助解决前两个要求。

Puppet或Chef肯定会帮助您配置一堆已准备好软件配置的系统。它们几乎是等效的,但Chef支持的操作系统平台较少。

我建议您参考OpenStack的持续集成,特别是项目门控和基础设施自动化:http://ci.openstack.org/

对于部署,有urbancode uDeploy可以让您在友好的GUI上设计自动化部署流程,但目前它是商业产品(被IBM收购)。实际上,Jenkins也可以做到同样的事情,但需要更多的编码和脚本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接