Application deployment with Puppet
Solution 1:
I'd look into either Capistrano or Fabric for deployments..
You'll have better control over how the deployment happens with these two tools.
Solution 2:
Puppet is used for deployments in many large organizations, but it's not always perfect. Much of it depends on your deployment methodology. Are you deploying to lots of machines at once? Do you do rolling deployments?
Some organizations use Puppet by building packages of their deployments and then having puppet enforce policy to be at the right version of that package. Because puppet has the concept of environments included, you can use environments to do deployments in stages (dev, test, prod for example).
Other organizations use puppet to orchestrate deployment by either firing off an rsync, git checkout or some recursively file copies using puppet (though that is rather slow).
There are other pretty good tools available for deployment too. I have used Whiskey Disk in the past (a simple ruby tool) and liked it a lot.
(Disclaimer, I work at Puppet Labs)
Solution 3:
If you want to build a package out of your application, you could look into FPM. Code is on GitHub.
Solution 4:
Puppet is not the appropriate tool for deploying applications in my opinion.
I use Jenkins for building and deploying our code to testing and staging.
Jenkins is originally a continuous integration server, but it is really flexible and modular. There exists lots of plugins for Jenkins that can help you deploy your applications:
- Deploy Plugin
- Publish over SSH Plugin
- Release Plugin
For our application, I have configured Jenkins with the Publish over SSH which copies a successfully built WAR-file to the destination server and then executing a script which does the backup and deployment. Hope this helps!