在分布式服务器上部署Java Web应用程序

我不得不将这个应用程序部署到三台服务器上,而且很快就要四台。 这是一个痛苦,我正在寻求自动化。 我要编写这个脚本,但这是一个很普遍的问题,那里有太多的工具(木偶,厨师,托盘,MCollective),我认为有人可能有一个现成的战略,他们愿意分享。

我们有3个networking服务器(不久将有4个)。 以下是我目前用来部署的步骤:

login到生产Web服务器1

> service httpd stop > service tomcat5 stop 

login到QA服务器

 > scp ROOT.war [email protected]:/usr/share/tomcat5/webapps/ 

但是,有时候它会更复杂,我可能需要复制以下任一项:/etc/httpd/conf.d/mod_jk.conf /etc/tomcat5/context.xml

但是我不能仅仅从QA复制context.xml,因为连接string在QA和生产中是不同的。

重新启动所有内容(在ROOT.war传输完毕后)

 > service tomcat5 start > service httpd start 

通常,我部署到server1,testing,然后部署到server2和server3。 我喜欢等到服务器2完成准备就绪之前,我开始部署到服务器3 – 可以木偶这样做(检查HTTP的HTTP状态)?

那么,我可以让Puppet部署server1,然后让它进行部署,并等待server2,server3,并很快成为server4?

分阶段推出,也许容易回滚将是我正在寻找的function。

我曾经同哈德森和卡皮斯特拉诺一起工作 – 他们都是非常有用的工具,值得调查。 Capistrano可以configuration为在部署之前使用rake脚本更新任何连接string/path,这是非常好的,我相信Hudson将允许您基于正则expression式来执行相同的操作。

两者都是为部署过程而devise的,真的很有帮助,它们都应该是相当自我logging的:)

我写了一个部署脚本,使用耙子来完成你基本想要的function。 写作和跨平台是很简单的。 Ant是这些types的简单部署脚本的另一种select。 但是,如果我有select,我正在使用耙。

HTH!

汤姆·珀尔