用Grails持续交付

时间:2013-07-31 13:32:28

标签: tomcat grails jenkins continuous-delivery

背景

我的团队一直在使用Jenkins为Grails应用程序运行持续集成(CI)。我们正试图通过设置部署管道并将按钮部署到多个环境(Dev,Itg,Prod)来接近Continuous Delivery。我们已经尝试使用Jenkins Tomcat插件来部署我们的代码,但是在Tomcat上偶尔会遇到PermGen问题,并且必须在部署后手动重新启动它。

问题:

  1. Jenkins是用于Grails自动部署的正确工具吗?
  2. 我们如何自动部署到Tomcat而不必在后面手动重启?

3 个答案:

答案 0 :(得分:2)

  1. 我认为没有人能说詹金斯是否是“正确的”工具,但这是一个很好的工具。
  2. 当你热部署到Tomcat时,它的PermGen几乎不可避免地会增长。重启是处理此问题的最简单方法。有关详情,请参阅What makes hot deployment a "hard problem"?等其他问题。您可以使用Post Build Task在Jenkins服务器上运行shell脚本来部署war并重新启动Tomcat。

答案 1 :(得分:1)

我们使用grails,tomcat和弹性负载均衡器,并通过AWS基础架构进行脚本化实例启动/配置/部署。 S3存储桶包含我们的war文件,它由我们的Jenkins服务器放置在我们配置的插件的一部分。这是由内部版本号和Jenkins作业名称版本化的,因此我们为每个环境都有一个。厨师脚本将我们的依赖关系和战争拉入实例并完成所有实际工作,而我们的Jenkins运行编排脚本循环并在每个成功阶段休眠,直到新实例完全启动并通过负载均衡器运行状况检查,此时我们停止旧实例(负载平衡器耗尽新的实例)。如果出现任何故障或超时,我们会在关闭新实例后失败Jenkins作业。为了遵循这种方法,我们在应用程序中没有共享状态,我们通过grails spring安全集成使用memcached(elasticache)作为会话存储。

答案 2 :(得分:0)

从我的角度来看(公认有偏见)Jenkins并不打算进行部署。它没有这样设置。如果剪刀不是为了剥橙子,Jenkins不是正确的部署工具。但它无论如何都能胜任。