I'm having to deploy my application to three servers and soon to be four. This is becoming a pain and I'm looking to automate it. I was going to script this, but this is such a common problem and there are so many tools out there (Puppet, Chef, Pallet, MCollective) that I thought someone may have an existing strategy in place that they are willing to share.
We have 3 web servers (and will soon have 4). Here's the steps I currently use to deploy:
log on to production web server 1
> service httpd stop > service tomcat5 stop
log on to QA server
> scp ROOT.war firstname.lastname@example.org:/usr/share/tomcat5/webapps/
Sometimes it is more complex, though, and I may need to copy any of the following: /etc/httpd/conf.d/mod_jk.conf /etc/tomcat5/context.xml
But I can't just copy over context.xml from QA, since the connection strings are different in QA and production.
restart everything (after ROOT.war has transferred)
> service tomcat5 start > service httpd start
Usually, I deploy to server1, test, and then deploy to server2 and server3. I like to wait until server 2 is completed ready before I start deploying to server 3 -- can Puppet do this (check for the HTTP status of /)?
So, can I have Puppet deploy server1 and then have it do the deploy and wait to server2, server3, and soon to be server4?
Phased rollouts and perhaps easy rollback would be features I'm looking for.