Discussions of what it takes to do DevOps often focus on high-level concepts, such as collaboration and automation. Those are indeed the high-level skill sets that DevOps practitioners should know, but which specific DevOps tools do you need to master to achieve practices like collaboration and automation? That’s a tougher question.
To provide some answers, this article walks through the key types of DevOps tools that engineers should learn to achieve the collaboration and automation goals of DevOps.
For most of these tool categories, there are a number of specific options available. In the interest of vendor-neutrality, I won’t promote any one particular tool over another, but I will explain why having expertise in each type of tool is critical for doing DevOps effectively.
1. Continuous Integration Servers
There is some debate about whether continuous integration and continuous delivery, or CI/CD, is an inherent part of DevOps or just a closely related concept that could exist without DevOps.
However you choose to define the relationship between CI/CD and DevOps, though, it's clear that knowing how to do CI/CD is a core skill for any effective DevOps engineer to have. Continuous integration automates the process of integrating new code into a larger codebase. Many modern continuous integration servers, such as Jenkins and Bamboo, also provide a variety of features to assist with code testing, security and more.
2. Integrated CI/CD Suites
There is a caveat to what I just wrote about the importance of knowing how to work with individual continuous integration servers: Increasingly, a variety of platforms provide built-in CI features as part of broader solutions that enable end-to-end CI/CD. If you use one of these platforms, you don’t need to learn a specific continuous integration server; you just need to know how to use the continuous integration features that are part of the CI/CD suite you adopt.
Platforms like GitLab and Azure Pipelines are good examples. They offer an integrated suite of tools--which are built directly into GitLab--for continuously integrating code, then building it and deploying it to wherever it is going to run.
These integrated CI/CD platforms provide less control over exactly how your DevOps toolchain is configured, but they also require less effort to set up and manage.
There is one item on this list that is not a DevOps tools category, but rather a specific tool: Git. If you want to do DevOps today, knowing how to use Git is essential. Git has become the de facto source-code management tool for virtually every DevOps team out there today. There are plenty of other source code management solutions out there, such as CVS and Bazaar, but they command smaller followings within the DevOps space than Git.
Knowing Git means not just understanding the Git command-line interface (although that is part of it), but also how to integrate Git with collaborative source-code management platforms, such as GitHub and GitLab.
4. Test Automation
Although DevOps was originally about helping software developers and IT Ops engineers work together more efficiently, most modern approaches to DevOps also bring software testing into the fold. In other words, DevOps today is about seamlessly moving code among developers, the testing team and the IT team.
For this reason, software test automation tools are increasingly important to DevOps. These tools allow DevOps teams to write and run tests automatically that validate whether code meets performance, reliability and usability expectations.
Probably the most popular tool in this category is Selenium, an open source test automation framework. There is also Appium, a Selenium spinoff that caters to automated mobile testing. Cucumber and TestNG are popular options, too.
Infrastructure-as-code tools automate the process of configuring the infrastructure that hosts applications, whether that infrastructure resides on-premise, in the cloud or both. Not only do these tools save DevOps teams time, but they also ensure greater consistency--and, by extension, easier collaboration among team members because everyone is working with identical developer environments--by applying the same configurations over and over again. When you configure infrastructure manually, you run the risk that one engineer will take a different approach than another, resulting in a lack of uniformity.
Chef, Puppet, Ansible and Terraform are probably the most popular infrastructure-as-code tools among DevOps teams today. Some public clouds also offer native Infrastructure-as-code tools, like AWS CloudFormation, although you don’t need to use the native option if you use one of those clouds; third-party tools are also compatible with public cloud infrastructure.
6. Team Collaboration Tools
There is no specific type of tool that DevOps teams need to use to collaborate. In small-scale DevOps settings, you could probably rely mostly on email or face-to-face meetings.
But to help streamline communication and collaboration (which are, after all, core DevOps goals), many DevOps teams turn to more modern tools, such as Slack or Microsoft Teams. These tools support real-time communication while also offering a variety of integrations that can streamline common DevOps tasks.
For example, you can integrate these tools with your continuous integration server in order to receive automatic notifications about code status. You can also set up chatbots and use them as an interface to control external systems directly from within your communication platform.
It’s true that DevOps is a philosophy more than a set of rigid practices. There are many different ways to “do” DevOps, and many DevOps tools that can help you in the process.
Nonetheless, most DevOps teams today rely heavily on a core set of different types of tools, from continuous integration and Git servers to test automation frameworks. If you want to achieve the automation and collaboration goals behind DevOps, learning these tools is a good place to start.