Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 部署自动化_Scala_Deployment_Jetty_Lift_Puppet - Fatal编程技术网

Scala 部署自动化

Scala 部署自动化,scala,deployment,jetty,lift,puppet,Scala,Deployment,Jetty,Lift,Puppet,我有一个Lift应用程序,它打包为WAR归档文件,必须部署在Jetty下。但是,我希望能够自动执行一些任务: 指定目标服务器(或服务器集合)。我有多台服务器,从开发服务器到测试服务器和生产服务器,我希望能够非常轻松地控制部署的目标 出于负载平衡的目的,目的地(例如开发)可能意味着服务器的集合 测试阶段。基本上,在每次部署中,我都希望运行整个测试集,并在应用程序未编译或一个或多个测试失败时阻止部署 WAR档案必须部署在Jetty下,同样部署在一台或多台运行Linux的AmazonEC2机器上

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

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

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

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

据我所知,目前还没有任何工具可以自动化这些类型的部署,我认为这是因为有太多不同的场景需要处理。至少,您有:

  • 一个单独的开发服务器,只需将WAR复制到位,然后重新启动应用服务器
  • 一台生产服务器,流程类似,但您不希望流程中断用户。这里的注意事项包括在重启期间保留会话数据,以及在低使用率的情况下规划重启时间
  • 在许多节点上都有负载平衡器的小型集群。现在事情真的变得复杂了。你可以使用各种不同的LB工具(HA Proxy、NGINX、Amazon的Elastic LB),如果你关心你的用户体验,你需要协调应用服务器的滚动重启。在节点之间迁移任何会话数据也是一个问题
  • 您有一个由不同地理区域的较小集群组成的大型集群。这里您要处理的是#3+任何需要在区域之间进行协调的配置
  • 我认为1和2是最容易找到通用工具的,如果这些是我需要处理的唯一情况,我可能会将Jenkins与应用程序一起部署。当发生更改时,可以很容易地将其配置为从git分支提取,构建代码并重新启动Jetty。但是,当你达到3和4的时候,我认为所涉及的不同工具的数量以及协调它们的需要已经排除了任何类型的标准解决方案。我也不认为这只是Java/Scala世界中的一个问题,因为我看到Github的人写了一些关于他们为管理而构建的自定义工具的文章


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

    也看到了这个问题

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

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

    您可以使用我们的产品完成所有这些工作。我注意到您提到了Puppet,需要注意的是,这个工具是为基础设施自动化而设计的,而不是为软件部署和交付而设计的

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

    要解决您的要点:

    部署到多个服务器 创建自动部署计划时,可以指定服务器组,并根据需要从组中添加/删除服务器

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

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

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

    Puppet或Chef肯定会帮助您配置一系列软件配置就绪的系统。它们几乎是等价物,但Chef支持的操作系统平台较少

    我建议您参考OpenStack的持续集成,尤其是在项目选通和基础设施自动化方面:

    对于部署,有urbancode uDeploy,它允许您在友好的GUI上设计自动部署过程,但目前它是商业化的(由IBM收购)。实际上,詹金斯也可以这样做,但需要更多的编码和脚本