Roadmap

 

From which background are you transitioning into DevOps?

  1. System administrator
  2. Software developer
  3. Test automation engineer
  4. Network engineer
  5. OR, with just a little IT knowledge

Depending on which background and pre-knowledge you have, you need to first make sure to get any missing prerequisite knowledge.

As a system administrator or a network engineer, learn software development workflows. As a developer, learn the basics of infrastructure, virtual servers etc. Of course, with zero or little IT background, you have to get all this prerequisite knowledge from server administration to development first.

 

CI/CD pipeline example

 

DevOps covers the whole software development lifecycle, so you work with lots of different tools and technologies. Plus, DevOps is still evolving and there are lots of new tools being developed all the time.

 

Start here:

 

1. Concepts of Software Development

As a DevOps engineer you will not be programming the application, but as you are working closely with the development team to improve and automate tasks for them, you need to understand the concepts of:

And generally understand what the whole software development lifecycle covers from idea to code, all the way to releasing it to end users.

 

2. OS & Linux Basics

As a DevOps engineer you are responsible for preparing and maintaining the infrastructure (servers) on which the application is deployed. So you need to know the basics of how to administer a server and install different tools on it.

Since most servers use Linux OS, you need to know and feel comfortable using Linux, especially its Command Line Interface. Basic concepts of Operating Systems you need to understand:

You also need to know the basics of Networking & Security in order to configure the infrastructure.

 

3. Containerization - Docker

Docker is by far the most popular container technology.

As containers have become the new standard of software packaging, you will most probably run your application as a container. This means you need to generally understand:

A container is a standard unit of software that packages up code and all its dependencies so that the application runs quickly and reliably in any computing environment. Things you should know:

 

4. CI/CD Pipelines - Jenkins

CI/CD is kind of the heart of DevOps. In DevOps, all code changes, like new features or bug fixes, need to be integrated into the existing application and deployed to the end users continuously and in an automated way. Hence, the term: Continuous Integration and Continuous Deployment (CI/CD).

When the feature or bug-fix is done, a pipeline running on a CI server (e.g. Jenkins) should be triggered automatically, which:

  1. Runs the tests
  2. Packages the application
  3. Builds a container Image
  4. Pushes the container Image to an image repository
  5. deploy the new version to a server

There are many CI/CD platforms out there, such as - GitLab, GitHub Actions, Travis CI, Bamboo, TeamCity. The most popular one currently is Jenkins.

 

Skills you need to have:

 

5. Learn One Cloud Provider - AWS

Some popular Cloud platforms are - AWS, Microsoft Azure, Google Cloud. AWS is the most powerful and most widely used IaaS platform, but also a difficult one.

Nowadays, many companies use virtual infrastructure on the cloud, instead of managing their own infrastructure. These are Infrastructure as a Service (IaaS) platforms, which offer a range of additional services, like backup, security, load balancing etc.

 

These services are platform-specific. So you need to learn the services of that specific platform and learn how to manage the whole deployment infrastructure on it.

Example, for AWS you should know the fundamentals of:

 

6. Container Orchestration - Kubernetes

Since containers are popular and easy to use, many companies are running hundreds or thousands of containers on multiple servers. This means these containers need to be managed somehow. For this purpose, there are container orchestration tools.

Kubernetes (also known as K8s) is the most popular container orchestration tool. Kubernetes automates the deployment, scaling and management of containerized applications.

So you need to learn:

Specific K8s knowledge needed:

 

7. Monitoring & Observability - Prometheus & Grafana

Once software is in production, it is important to monitor it to track the performance, discover problems in your infrastructure and the application.

So one of your responsibilities as a DevOps engineer is to:

 

Prometheus: A popular monitoring and alerting tool.

Grafana: Analytics and interactive visualization tool.

You should also understand how systems can collect and aggregate data with the goal of using it to troubleshoot, gain business insights etc.

ELK Stack: A popular log management stack.

 

8. Infrastructure as Code - Ansible & Terraform

Manually creating and maintaining infrastructure is time consuming and error prone. Especially when you need to replicate the infrastructure, e.g. for a Development, Testing and Production environment.

In DevOps, we want to automate as much as possible and that's where Infrastructure as Code comes into the picture.

With IaC we use code to create and configure infrastructure and there are 2 types of IaC tools you need to know:

  1. Infrastructure provisioning
  2. Configuration management

 

Terraform: This is the most popular infrastructure provisioning tool.

Ansible: This is the most popular configuration management tool.

 

9. Scripting Language - Python

Since you are closely working with developers and system administrators to also automate tasks for development and operations, you will need to write scripts and small applications to automate them. For that, you will need some scripting or basic programming skills.

Examples: utility scripts like flushing the cache, starting the builds and deployments etc.

This could be an OS specific scripting language like bash or Powershell. But what's more demanded is an OS-independent language like Python, Ruby or Go.

These languages are more powerful and flexible. If you know one of these, it will make you much more valuable as a DevOps engineer.

There are many programming languages, but I would recommend starting with Python. Python is widely used, easy to learn and used in many different cases, especially in DevOps.

 

10. Version Control - Git

You write all automation logic as code. And just application code, automation code should also be managed and hosted on a version control tool, like Git.

Git is a CLI Tool, which you install locally. It enables the tracking of changes in the source code and enables better collaboration on code.

So you need to learn:

Your files are stored centrally in a remote Git repository on the web. The most popular Git repositories are GitHub and GitLab.