6

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

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

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

4

4 回答 4

5

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

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

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

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

至于 Puppet,需要注意的是,我从未使用过它,它似乎可能是此类流程的有用工具。您需要某种类型的中央协调器来处理集群,我相信 Puppet 可以提供帮助。

于 2013-03-19T14:43:13.507 回答
1

您可以使用我们的产品BuildMaster来完成所有这些事情。我注意到您提到了 Puppet,请务必注意,该工具是为基础设施自动化而设计的,而不是软件部署和交付。

在 DevOps 领域工作时,我们发现通过团队协作保持软件和基础架构部署正交和同步非常重要(开发人员不是运维人员,反之亦然)。

要解决您的要点:

部署到多台服务器

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

测试阶段

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

码头部署

复制 WAR 文件就像使用 SSH 代理将工件部署到服务器一样简单。

于 2013-04-29T16:27:07.433 回答
0

也看了这个问题。

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

(当然,SBT 允许您测试、防止打包,并且有很多部署工具都具备 WAR-s 和 Jettyies 的知识。)

于 2013-03-20T22:16:05.720 回答
0

这是一个典型的 DevOps 场景。我认为 Jenkins 将通过添加几个开源插件来帮助解决前两个要求,以获得对作业的更多控制,例如“CloudBees 构建流程”和“节点和标签参数”。

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

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

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

于 2013-09-06T08:00:51.710 回答