scala - 部署自动化

标签 scala deployment jetty lift puppet

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

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

  • 我正在使用 SBT,我不知道这与 Puppet 或类似的东西一起玩得有多好。你会怎么做?

    最佳答案

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

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

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

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

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

    关于scala - 部署自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15466239/

    相关文章:

    java - 在 Jetty 9.4.2 中禁用默认错误响应主体

    java - 在 OSX 上通过 Maven 运行 Jetty - 阻止 "Launcher"应用程序打开

    java - jetty continuation - 暂停的请求 - 资源

    scala - 非持久性数据结构可以以纯函数方式使用吗?

    scala - 有没有等效于 Scala 的 Iterable.maxBy 的 Haskell?

    scala - 在没有 sbt 的情况下运行 Spark sbt 项目?

    Java 与 C++ Qt : what choice for a gentle deployment?

    eclipse - Spark 在客户端机器上提交

    deployment - 部署 Meteor 应用程序时保护 key 的最佳方法是什么?

    PHP 部署到 windows/unix 服务器