If you are dealing with deployments on regular basis then choosing a good and stable deployment library which has certain features for deployment e.g. parallel deployments is mandatory.
We recently faced same challenges as previously we were using Ant for packaging and deployment, then moved to Gradle but after considering moving our infrastructure behind load balancers (to support more users and fault tolerance) we wanted to have tool which can enable us to be able to deploy to our servers in parallel behind load balancer.
For this purpose we explored and tried out a few tools to see which tool would fit better for a longer run in our scenario. List of the tools which we evaluated are following:
1. Ansible: While it does support parallel deployment, it is quite a large tool set and more of a server management and configuration tool. We are already using Chef for server management and configuration so going with this was not ideal for us.
We preferred Chef over Ansible due to the utility and customizations we can do via cookbooks and recipes.
2. Capistrano: This tool is based on Ruby and follows deployment to a custom folder which is customizable but expects every deployment to be working from a separate folder via symbolic link.
3. Fabric: This is a python based library which streamlines system administration and supports for parallel deployments across fleet of servers.
In the end we decided to go with Fabric due to the following reasons:
- Python is a more mature and widely used system administration language.
- A vibrant community and documentation.
- We are already using Python for some our tasks and plan to migrate other scripts (which are written in shell and php) to Python in the longer run.