In 2016, I and one of my ex-colleagues enrolled ourselves in a 3-days classroom session, which had a curiosity-sparkling title – “The complete DevOps Crash Course”. The term “DevOps” was getting popular in the industry and we didn’t want to miss out on the trend. So we thought of jumping on the bandwagon and we took the course. To our disappointment, the whole session was just about a couple of tools and their interaction with each other, demonstrated in a sandbox environment.
In the last 3 years, I got opportunities to work on different tools/technologies which are common names in the DevOps world, and with people who I consider to be senior practitioners in DevOps implementations. In these years, I read a lot about what DevOps is, what the industry leaders think of it and attended a couple of DevOps conferences. From all the learnings I had, I realized that it’s like an “ocean” and the tools, we often talk about, are like smaller “water-bodies” 🌊
DevOps is certainly a lot more than the tools we know of and in this article, I will go through the steps which will help you to roll up your sleeves, up-skill, enter and progress in the world of DevOps, with a strong solid foundation. If you have worked in the development/test automation/system administration space, as you read through the article you will realize that you are already aware of or have worked on many of the mentioned tools and technologies.
So let’s get started.
1) Know and understand the common terminologies
Before starting to learn any new tool/technology/methodology, I always prefer to spend a good amount of time knowing about it – its definition, its brief history, thought-leaders’ perspectives, how it is solving problems, what problems it is solving, how it is evolving and its projected future. The streams through which you can gain knowledge on these things are numerous and are certainly not limited to only blogs/books/videos 📚
Knowing about these will help you to set the context and will give you a picture of the DevOps path you will be treading. Acquire some surface-level knowledge on the common terms you will be coming across in your DevOps journey – DevOps, Agile, Development, Operations, Deployment, CI/CD, Pipelines, Quality, Monitoring, Observability, Infrastructure Scaling, and Software Reliability-Availability-Resiliency. Once you absorb some basic understanding of these, move on to the next phase.
2) Learn Linux
As you start your journey in DevOps, you have to have an understanding of the Server Operating Systems – preferably Linux. Learning Linux is essential since most of the applications are and will be Linux-based (hosted in Linux servers and have Linux supporting their operations like network administration, system administration, database management) because of the stability, security, scalability, and flexibility that it provides.
Linux is complex and takes years to master. You don’t have to become an expert in Linux but you have to learn and understand how to set up and manage Linux servers to facilitate development and deployment activities. If you prefer Windows, note that DevOps implementations can also be done in Windows but it becomes more inconvenient than Linux. It is also possible to set up a VM/WSL/Multipass in Windows which will let you use Linux – hence you will get the flavor of learning and working with both Linux and Windows environments side-by-side.
The things in Linux which you have to learn are – Linux basics, its CLI and the Shell commands, package management (installation, removal, updates), SSH Key management, File management (symlinking, permissions), and Server Management ✅
3) Learn about Networking and Servers
Similar to what being said for Linux, you don’t have to become an expert in Computer Networking too, but learning the Networking fundamental concepts is essential in your DevOps journey. Learn about the OSI model, Firewall, Proxy Servers, Load Balancing, CDN (Content Delivery Network), different networking protocols (HTTP, HTTPS, TCP, IP, SMTP, FTP) and their status/error codes, SSL (Secure Sockets Layer), DNS (Domain Name System), DHCP (Dynamic Host Configuration Protocol) and the system admin tools available for troubleshooting (Ping, Traceroute, Nslookups).
From the servers’ side, learn about the different types of servers, their differences, the common web servers like Apache or Nginx, and how to install, configure and operate them. Also, know how to set up virtual hosts in them.
4) Learn one OS-specific and one general-purpose Scripting Language
If you know how to code and have experience coding in one or more programming languages, learning a new scripting language will not be difficult. But the learning curve may get steep if you don’t practice consistently. The scripting languages help engineers to take backups, create scheduled jobs (like cron), or perform some system monitoring tasks.
To start with, I would suggest one scripting language which is OS-specific, preferably Bash scripting which supports Linux systems (Windows alternative is Powershell). For Bash, learn Bash Shell (e.g. PATH, aliases, fork, file descriptors, shell variables), Bash Scripting (e.g. functions, arithmetics, parameters, loops, conditions), and Crontab Scripting.
As a general-purpose Scripting Language, you can choose between Python, Ruby, and GoLang. If you select Python, which I prefer, start learning and practicing its concepts like classes and objects, conditional statements, loops, operators, data structures, file handling, etc.
5) Learn Release Management, Infrastructure Provisioning, and Configuration Management
For most of the companies, gone are the days when releasing application features used to be manual, error-prone, and a long stressful process. With the introduction of a plethora of tools, release management has become simpler, straightforward, documented, and most importantly, automated. Automation is at the core of DevOps. At this stage of your DevOps journey, learn “Infrastructure-As-Code” or IAC and how you can maintain multiple environments in an automated way 👌
IAC is a way of describing the servers in the source files, checked into a version control system (like Git), and applied automatically when needed. Then, move forward and learn an Infrastructure Provisioning Tool (Terraform) and a Configuration Management Tool (between Ansible/Chef/Puppet). The Infrastructure Provisioning Tool will help you to automatically create and destroy infrastructure using IAC. The Configuration Management tool will help you to declare what the servers should look like and when required, will automatically apply changes to the servers.
6) Gain knowledge on Artifact Repositories, Build Automation, and Version Control
In one of my previous articles, I have explained why one should learn Build Management Tools. The build management tools and package managers script and automate the repetitive mundane tasks (like managing dependencies) which are required to set up and release a software product. For this, which particular tool you need to learn will depend on the application you will be working with. If it’s Java-based, you will be learning either Gradle or Maven. For JavaScript, you will be spending time to know npm.
An artifact management tool (commonly known as artifact repository) is an application that stores, organizes, versions, manages, distributes, and deploys different types of artifacts for the builds. It can be either a local one, a remote one, or a virtual one. The artifacts can be any documentation/deliverable/dependency and are usually stored in the form of binary packages or Docker containers (along with their metadata). Only know about the artifact repository you and your team will be working with (some examples are – Nexus, Artifactory, DockerHub).
For version control, there is one obvious choice – Git. If you are working in a team to build and release a product, you have to learn Git which will be your local source code management tool along with a remote Git repository (e.g. GitHub, BitBucket) hosted on the internet.
7) Learn how to facilitate the Continuous Integration (CI) process
Continuous Integration (CI) is an integral part of every DevOps implementation. It is a development practice of automating the integration of developers’ code changes by merging the changes and putting them in the remote repository which then automatically triggers a CI server (e.g. Jenkins) to start the build actions and run the integrated tests. This will check and assert the correctness of the complete code and provide quick feedback about the product to the team.
In your learning roadmap, include Jenkins which is the most popular and widely used CI tool. In Jenkins, learn how to create/configure jobs, how to trigger them (automatically or in a scheduled manner), how to maintain/update plugins, how to create pre-build and post-build actions, how to configure master-slave nodes, how to create pipeline scripts, how to assign permissions and there are a lot more interesting things in it to learn. Though I am recommending learning Jenkins first, the concepts you will learn can be extended to other CI tools too if you have to work with them in the future.
8) Learn Containerization and Virtualization
In your work, you will spend a lot of time on Virtualization and Containerization to add more agility, consistency, and flexibility to the software product development and maintenance process. As you will be working with servers, learning Virtualization concepts will help you to create multiple virtual machines (VMs) on a single server which will help you to distribute the server machine resources to multiple environments/users.
You need to know about hypervisors that will help you to manage the VMs. Learning Containerization tools and concepts will help you to encapsulate an application and its required environment, by packaging it and its dependent libraries, frameworks, and configuration files together in a portable image file. Learn Docker for that purpose and then learn Kubernetes which will help you to manage the containerized applications.
Conclusion
In this article, I have covered the skills and steps to enter the world of DevOps 🌎 As said earlier, DevOps is huge and the number of tools that facilitate DevOps is far too many. But if you take this suggested route, it will put you on the right path because you will learn the fundamental concepts that will also help you learn any tool quickly.
Here, I have taken a more generalist approach but note that becoming a DevOps specialist/expert will take years. Also, as you progress, you have to learn more about Logging, Tracing, and Monitoring tools and important services/security offerings that Cloud Service providers (AWS, GCP, Azure) offer. As you might have already realized, it will be a long journey where you will need to continuously sharpen your skill and learn-unlearn-relearn any tool/technology quickly!