2013-07-31 109 views
2

背景:持续交付使用Grails

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

问题:

  1. 詹金斯是用来与Grails的自动部署正确的工具?
  2. 我们如何自动化部署到Tomcat而无需手动重启后续字?

回答

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

从我的角度来看(坦承偏见)詹金斯并不打算执行部署。它没有这样设置。就剪刀不打算剥橙子而言,詹金斯不是做部署的正确工具。但无论如何,它都会完成这项工作。

1

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