Over the past year, I have had the privilege of being invited to mentor startups from across the globe, mostly powered by Google. While working with these startups and their products on using technology to build for scale, there has been a consistent recurrent theme: No love for automation!
They have been missing out on how much easier life could potentially be if they had automated or known that they could. So, I have had to repeatedly give the same pep talk about DevOps automation and some tools that could help them along their journey…
Let’s just say this article is the paper version of those pep talks :).
DevOps is an emerging term coined from the phrases Dev “development” and Ops software “operations”. It is a movement that advocates the automation and monitoring of all steps involved in the software development lifecycle.
But in simple english: it is a set of processes and tools that helps Dev and Opsteams work faster.
The 6 Stages (Mostly).
The following are the six stages in almost every software development lifecycle:
- Requirement gathering and analysis.
- Implementation or coding.
What I would like to focus on is the tools that can help in stages 4, 5 & 6. I am sure we have all heard of Continuous Integration & Continuous Deployment (CI/CD), it is simply automating how code gets to our production servers rather than manually going through the hoops of doing that (whatever yours maybe, I have experienced various forms of doing this. Too much stress.). So in other words, replacing human intervention with machine.
Tools I have used & love.
The aim here is to point you in the right direction, you will have to hit the docs to see which you prefer and you think is a good fit.
So, Docker is the first tool I would recommend on this journey. It essentially is a very lightweight vm that can help you create a reproducible, portable and reusable snapshot of your application or parts of them. If you would like to avoid the dreaded “Err, but it worked in dev” situations, please tow this line. It is the holy grail my friend, the holy grail.
The next set of tools I would suggest you look at to help with CI are either Jenkins, CircleCI, TravisCI, Fastlane. Jenkins is a self-hosted open-source extensible automation server, while CircleCI & TravisCI are commercially managed solutions. (TravisCI also has an open-source version). Fastlane is an open source platform aimed at simplifying Android and iOS development and release workflow. These tools can actually help run automated tests & finally build your application prepping it for deployment. Please note that there are a lot of other equally excellent tools out there, but these are the ones I have worked with.
And finally for automated deployment of your applications, I would recommend you look at one of Kubernetes, CoreOS, Amazon EKS, Amazon ECS & Google GKE. Kubernetes is a self-hosted open-source system for automating deployment, scaling, and management of containerized (using docker) applications. Amazon EKS & Google GKE are cloud hosted managed solutions. We currently use Google GKE in production.
I hope this was helpful.