Deployment Automation Tools/Frameworks Comparison
At FM we have a problem. Each time someone start working on a new project (a web application, to be more specific) s/he needs to create a new VM and set it up and install a ruby (this is the most used stack at the moment, yay! :D) stack on it. Which is a pretty straight forward and well known process. However when you have to do it 2 to 4 times per month it gets pretty tedious. And it consumes valuable time. So... we are going to automate it! (yeah we should have done it a long time ago :)).
Common Considerations when choosing a tool
I think its important to consider the following things when choosing a automated deployment tool.
- How many ready made 'recipes' are available. This usually goes in hand to hand with how widely adopted the tool is.
- How do you like the DSL offered by the tool
- How long is the learning curve
- The scope of the tool? Does it address your set of problems?
- Documentation
Things i were looking for
- The tool doesn't need to be installed in to the server. It rather operates remotely through SSH
- Should be able do the basic unix server setup stuff like: adding my private key, create a account...etc
- Setup a full ruby stack with Apache/nginx, RVM, git, myslq with minimum hassel.
The ones listed above are what im looking for. However just because a tool dosen't already have a recipe that handles installing RVM it doesn't become a bad tool (duh!).
Tools/Frameworks that i tried out
Chef and Puppet
They seemed a bit too much for what i needed. I feel that i should be able to use a far more simpler tool with a shorter learning curve. However both of them are grate tools. I would like to work with chef in the future. But right now, all setting up a server (AFAIK chef needs a chef server to operate. However puppet doesn't necessarily need one) just to get this done sounds a bit intimidating.
Babushka
The author of Babushka: "However, I don't think of babushka as a deployment tool. I think of it as a "remember what I researched or learned the first time" tool, and part of that is deployment." In it's home page it is described as: Babushka is a tool for finding, running, writing and sharing recipes to automate things.
I actually like the philosophy of the tool. There are tons of things that i research about and forget in a very short time. It would be grate to write them down and reuse them easily in the future. And since this is not limited to deploying stuff it covers a wide spectrum of tasks that you might want to automate. Such as installing homebrew!. So once you 'script' something you can easily reuse it. And if something goes wrong babushka will try to identify the step that went wrong and point it out to you. So you can look at it and deal with it. Very useful!
However one tiny drawback of babushka is that you have to install it on whatever box that you are going to setup with it. Which is not (because they execute stuff through SSH) the case with tools like Git Pusshuten/Capistrano.
Sprinkle
Sprinkle on the outlook looked like exactly what i need! It's official description says: "Sprinkle is a software provisioning tool you can use to build remote servers with. eg. to install a Rails, or Sinatra stack on a brand new slice directly after its been created " This is what i need. Like most solutions discussed here it have a DSL so you could write deployment scripts to setup different servers with different services and packages. It has a nice collection of 'Installers' that let you install applications from various sources. From APT to running ad-hoc commands. Using these can make your life easier (as someone who writes scripts).
Most likely you would be using capistrano (its not coupled to capistrano) with sprinkle to deploy and setup remote servers from your workstation.
However after checking out the available deployment scripts. I feel that there is more room for more 'out of the box' scripts.
Git Pusshuten
As the official web page describes it: "It is a Git-based application deployment tool that allows you to define your environment by utilizing modules and provision your server with basic deployment needs."
I have use gitpusshuten in the past. And it does what its supposed to pretty well. When compared with Sprinkle and Babushka its not that widely used (assuming that github stats: # of forks and watchers are good indicators).
With gitpusshuten you will be issuing a series of commands in the process of setting up a server and deploy a app to it. It feels like something in between capistrano and sprinkle to me. In the end i decided on using gitpusshuten. Mostly because it already had 'recipes for most of the tasks that i needed.
Conclution
I hope to play around with Babushka and chef in the future. I feel chef is a good tool (in the long term) to invest (learn, use, contribute) in. Babushka too interests me, however i would imagine my self using it to automate things in general. For deployment stuff i would like too use something i can run through ssh.