Coming up with a "best of" list of anything is actually quite difficult, and automated deployment tools are no exception. There are tons of tools available right now that offer some semblance of automated deployment.
I'm an application developer, and so from my perspective, I want something that is dead simple. I don't want to get bogged down in the complexities of creating, configuring, and managing an infrastructure.
I also want something that allows me to deploy my application without having to hand it off to someone else to deploy. I just want a "fire and forget" solution, that's easy to understand, configure, and use — that makes deployment trivial.
While you may not necessarily be an app developer, I'm assuming, since you're still reading this, that to some extent you want these same things.
What is Automated Deployment
Let me clearly define the criteria I'll be using when considering different automated deployment tools:
A tool that allows you to deploy your application to production servers with minimal configuration and little prior DevOps knowledge or experience.
There are a lot of tools that offer auto deployment but don't fall into that description above, so this helps narrow it down quite a bit.
On one end of the spectrum, you have tools like Jenkins, Ansible, or SaltStack. These are really great DevOps focused tools that make it very easy to define and provision an infrastructure.
While they do have auto-deployment features available, they aren't as hands-off as I'd like. There is still some configuration involved in creating an infrastructure and deploying applications.
On the other end of the spectrum, you have continuous integration/continuous delivery (CI/CD) services like TravisCI, CircleCI, and Codeship.
These are really great for testing your code base to ensure stability before you deploy, and they also come with their own deployment options. But again, application deployment isn't their focus.
So Whats Left
While both DevOps configuration tools and CI/CD services are great, they don't provide the complete workflow, and auto deployment is just a part of what they offer, not the focus.
What's left are a few tools that have tackled application deployment specifically. They take DevOps out of the equation, by fulfilling that role for the application developer.
While there is some configuration involved it is very minimal and easy to understand. This leaves developers free to focus on their applications and not be concerned with the infrastructure underneath or how to deploy it to production.
Taking the criteria above, the following services have the best offerings in terms of application focused automated deployment.
[Heroku is] the best platform for building with modern architectures, innovating quickly, and scaling precisely to meet demand. - https://www.heroku.com/
Heroku was really the first tool in this space. For over a decade they have made it very easy for developers to deploy applications to their infrastructure, which is built on top of AWS.
Although Heroku doesn't offer a local development platform, they make it very easy to deploy your application using a simple config file and
Also, while Heroku isn't a complete platform, they make it easy to integrate additional services into your application with external third-party plugins.
Heroku has been around for a very long time and is a trusted name in automated deployment. They have support for many difference languages and are working towards better support for Docker-style, microservice application deployment.
Convox is the cloud solution you would have built. - https://convox.com/
Convox was started by a former Heroku employee, which is apparent in the similarities between their tools and workflow.
Like Heroku, Convox is built directly on Amazon services. The main difference is that Convox uses your AWS account versus Heroku, which is built on top of AWS but you use servers they purchase from AWS.
The benefit of linking directly to your AWS account is that it provides you with more flexibility. This comes with the potential drawback of needing to manage your servers separate from Convox, and haveing to decide if, and when, to update them.
While Convox is a good choice for any application, they make it very easy to move away from Heroku. Their CLI tool and configuration files are very similar, and they even support Heroku build packs.
Deployment. Ops. Databases. Containers. Configuration management. Service discovery. Forget about all of them. Flynn is all you need to know. - https://flynn.io/
Flynn is a really cool little tool that basically gives you a PaaS wherever you want it. Unlike some of the other options, rather than a config file to describe your infrastructure, you use their tool to create it and
git to deploy it.
Their focus is on providing everything you'll need, out of the box, to deploy your application anywhere you want. They give you the ability to do everything that others do through their CLI tool.
Flynn doesn't provide an online dashboard for managing and scaling your application once it's in production, but the isn't necessarily a drawback for everyone.
Also, if you'd rather avoid managing your application at all, they offer a managed option where the team at Flynn will take care of everything for you.
The industry’s most secure and comprehensive enterprise-grade container platform based on industry standards, Docker and Kubernetes. - https://www.openshift.com/
I think their own statement says it all. Being an official product from Red Hat, you know that you'll be getting a lot of experience built into the product.
They don't hide the fact that they are targeting enterprise level applications, meaning you'll be paying for what you get. Which isn't necessarily a bad thing, as long as you can afford it.
If you're not running an enterprise application, Openshift is probably more than what you need.
The ideal platform for developers. Stop dealing with environment config and dev-ops complexity. - https://nanobox.io/
Nanobox is the only platform that spans the entire development to production workflow.
With a simple YAML config file, Nanobox leverages Docker to create isolated development environments for each of your applications. Once an application is ready for production, you link your local codebase to any number of running apps on any host and deploy.
Many organizations find that when using Nanobox they don't need in-house DevOps experience.
Using a single command to deploy your application code to your production servers, Nanobox bears the burden of creating and configuring your infrastructure and deploying your code.
Nanobox makes it easy to manage and monitor your production application with a custom dashboard that provides zero downtime scaling, logging, and server access.
Easily add custom environment variables, SSL/TLS encryption, and application collaborators.
You can do all of this yourself, or you can opt to have Nanobox take care of your entire platform with their Managed Platform. Nanobox takes on the role of your DevOps team, with over 10 years of experience in the industry, ensuring your application is always running at its best.
Which is the Best for you
Many solutions you'll find solve just a piece of the puzzle, whether it's infrastructure creation and configuration or application deployment and management.
When choosing an automated deployment tool, make sure you're getting everything out of it that you want.
I'm not going to tell you what's best for you because I don't know your needs, but hopefully, you'll have a little more information regarding what options you have when it comes to auto deployment, and are able to find the right fit.