背景:
我的团队一直在使用 Jenkins 为我们的 Grails 应用程序运行持续集成 (CI)。我们正在尝试通过设置部署管道并将按钮部署到多个环境(Dev、Itg、Prod)来更接近持续交付。我们曾尝试使用 Jenkins Tomcat 插件来部署我们的代码,但在 Tomcat 上偶尔会遇到 PermGen 问题,并且必须在部署后手动重新启动它。
问题:
- Jenkins 是用于 Grails 自动部署的正确工具吗?
- 我们如何才能自动部署到 Tomcat 而无需事后手动重新启动它?
背景:
我的团队一直在使用 Jenkins 为我们的 Grails 应用程序运行持续集成 (CI)。我们正在尝试通过设置部署管道并将按钮部署到多个环境(Dev、Itg、Prod)来更接近持续交付。我们曾尝试使用 Jenkins Tomcat 插件来部署我们的代码,但在 Tomcat 上偶尔会遇到 PermGen 问题,并且必须在部署后手动重新启动它。
问题:
我们使用 grails、tomcat 和弹性负载均衡器,并通过 AWS 基础设施编写脚本实例启动/配置/部署。S3 存储桶包含我们的 Jenkins 服务器作为我们配置的插件的一部分放置在那里的 war 文件。这是由内部版本号和 Jenkins 作业名称控制的,因此我们为每个环境都有一个。厨师脚本将我们的依赖关系和战争拉入实例并完成所有实际工作,而我们的 Jenkins 运行编排脚本循环并在每个成功阶段休眠,直到新实例完全启动并通过负载均衡器健康检查,此时我们停止旧实例(负载均衡器排向新实例)。如果出现任何故障或超时,我们会在关闭新实例后使 Jenkins 作业失败。
从我的角度来看(诚然有偏见)詹金斯并不意味着执行部署。它不是那样设置的。就剪刀并不意味着剥橘子而言,Jenkins 不是进行部署的正确工具。但无论如何它都会完成这项工作。