Puppet Deployment – Application Deployment Workflows

deploymentworkflows

I've been researching puppet lately, and I think it could be useful to integrate into my deployment pipeline.

Currently, I deploy my apps by manually adding users, creating vhosts, setting directories, and then git cloning my repo from GitHub. I deploy changes with a simple Git pull (Git hooks take care of database migrations, clearing the cache, etc).

With puppet, I could setup a manifest to do the directory creation, permissions and virtual host management for me. To deploy an app to a dev/prod environment, I'd pull the manifest from GitHub and run it locally. I was also thinking about adding the puppet manifest process to the Git hook so every pull, Puppet could ensure directory permissions are OK.

Are there issues with this approach? Things I could do better?

Best Answer

This sounds like an effective approach; I like the creativity. Since you asked for comments, I will offer a few:

1) While puppet is a very powerful tool, it seems like a bit of overkill for just directory creation and permissions. A simple bash script might do the trick in as many lines as Puppet, with no Puppet executable dependency.

2) Consider using Puppet to do your deployment too: PuppetLabs provides a manifest to check out of a git repository. Then you can run it periodically, or on some other form of trigger. This obviously would invert the directionality of your deployment, turning it from a "push" model to a "pull" model. It can have advantages, including simplicity.

3) A more advanced usage of Puppet would have you set up your entire production environment from scratch, including installing your app. This would create a fully automated instance of your app, making virtualized instances easy and portable, and causing horizontal scaling to be simple.