A look at DevOps tools landscape
DevOps is probably one of the most hyped buzz words along with others like Serverless, Cloud, Big Data and so on. But, it is also probably the most ill defined. There is no single definition, rather people use the term ‘DevOps’ as it suits them. And I don’t see harm in doing that as long as the basic concept is clear.
But with rapidly growing tools and services around DevOps, there is a lot of chaos — every now and then there is a new DevOps tool in the market that is fundamentally different from others. Now, tools are very important and a good tool can help a great deal. Steve Jobs famously said
“Technology is nothing. What’s important is that you have a faith in people, that they’re basically good and smart, and if you give them tools, they’ll do wonderful things with them.”
So, it becomes necessary to have a clear understanding of various tool categories that fall under the DevOps umbrella. In this post, we’ll do just that, but note that this is not supposed to be an exhaustive list, though I will try to cover all the major categories and famous tools therein. So, I may have missed your favourite tool, but that is not on purpose.
Project Management (PM)
Project management tools are used to plan and manage tasks related to the project. In some cases these tools are also used to track bugs, change requests etc. There are various think camps trying to find out the best ways to manage projects and hence many of these tools are implemented based on their own ideologies, for example Agile, Kanban etc. You just need to find out the ideology that suits you best and then start with corresponding tool.
Here are few of the most common PM tools: Jira, Asana, Taiga, Trello, Basecamp, Pivotal Tracker. If you’re looking for more, checkout this long list of PM tools.
Source Code Management (SCM)
SCM tools handle versioning of source code files and help developers collaborate easily over source code. Some of the most common names are GitHub, GitLab, BitBucket, SubVersion. If you’re looking for more, checkout this ultimate list of SCM tools.
Continuous Integration (CI)
Once you have a stable source code versioning mechanism, you’d probably want to make sure the code is of good quality and can be deployed whenever required. This is, the software should work as intended at any instance. This is one of the Agile principles too. CI tools help you achieve this by automatically building and testing the source code from SCM and reporting the results.
Some of the most common tools in this category are Jenkins, TravisCI, CircleCI, CodeShip. If you’re looking for more, check out this list.
Continuous Delivery (CD)
Even if you make sure the code is working as expected, you can’t deliver the source code to your customers/users. You need a mechanism to build the code into some kind of executable bundled with all the dependencies. This is where CD tools come in.
Common CD tools include Ant, Maven from Apache, Gradle, Grunt, npm, and so on. You may note here that CD tools need to interact directly with the source code and hence these tools are language specific. Though there are language agnostic CD tools too.
Code Review
Code debt management and peer review are very important aspects of software development. Some of the famous tools in this category are SonarQube, CodeClimate, Bliss. You can find a comprehensive list of code review tools here.
Containerization
Till now we covered some of the conventional tools and techniques that are being followed for years if not decades. But recent shift in the way infrastructure is managed has led to several new tools and ideologies, most popular among them is containers. Containers help teams easily deploy, test, and manage their code. It is almost like assigning your application a separate room on a computer. With this, the dependency on infrastructure has gone down and the deployment process has become fast.
The way this has developed till now is that the moment you hear the word container, you think of Docker. But there are several other players in this field, prominent among them are rkt, LXD. There is even a standardization initiative to make sure these containers from different vendors play well with each other.
Automation
Earlier, as soon as we saw a repetitive task, we made sure there was a script triggered to do that task automatically. Now, with DevOps at center stage, the process remains the same, the tools have changed though. When your infrastructure is decentralized and cloud-based and you’re dealing with frequent deployments of largely identical services across largely identical servers, having a way to automate the configuration and maintenance of everything is a large boon.
Some of the most popular automation tools are Ansible, Chef, and Puppet. You can read more on pros and cons of these tools here.
Orchestration
Orchestration is the automated arrangement, coordination, and management of computer systems, middleware and services. The goal of orchestration is not just to automatically execute a service, but also to streamline, optimize the processes for even greater gains in deployment velocity. There are several tools in this field like Kubernetes, CoreOS, Apache Mesos, DC/OS.
Most of these help you run containers at scale, i.e. without worrying about stuff like memory, interconnectivity, failed nodes, processing power etc.
Logging & Monitoring
Final components of the DevOps landscape that we’ll see in this post are logging.
Though sometimes ignored, Logging not only helps you keep a track of your software performance, it also helps you debug issues with great accuracy. While monitoring helps you check and make sure everything is up and running. Some of the well known logging and monitoring tools include Logstash, Fluentd, Takipi, Nagios. Check out this list of logging tools here.
As we build Devup, a platform to integrate software development tools, we want to make sure our assumptions are correct. We’re running a short survey to find issues with current software development methodologies. Go ahead, fill it, it won’t take more than 2 minutes!