DevOps is a relatively new concept which has been gaining a lot of popularity and taking over the traditional way of software development.
The term DevOps is so broad and includes so many concepts that it became difficult to define it and set the boundaries.
The simplest definition is that -
DevOps is an Intersection of Development and Operations.
But this is not sufficient -
- Where do the boundaries of DevOps start and end?
- Which part of Development is not DevOps?
- Which part of Operations is not DevOps?
- Why was there even a need for DevOps?
Development and Operations are the two major components of the whole Application Release Process.
So, first, what is the Application Release Process? let’s see -
Application Release Process
Whenever we are building an application, we always have the same process of delivering that application to the end user. So, no matter our approach, the primary goal is to deliver the application to the end users.
A Typical Software Release Process looks something like this -
After following the above steps, the application is launched and made available to the end users. But that is not the end of the journey. While the application is in use, we have to check whether there are any problems with the application.
If there are any issues faced by the user, then we have to fix them. Now, this is the initial launch of the application.
But this is not the end of Application Development you might want to make some improvements, and when those improvements are made you want to make them accessible to the users immediately.
So, after the initial launch of the application to keep track of multiple updates you version those changes.
We repeat this process repeatedly, so this gives us the process of continuous delivery of changes, an endless cycle of improvements to our application.
Now, the question is that what is the role of DevOps in this complete Process -
- DevOps is about making this process of continuous delivery fast with minimal bugs
Challenges DevOps tries to solve -
- The very first one is the Miscommunication and lack of collaboration between developers and the operations team.
- Conflict of Interest - In a traditional setup where one team is only responsible for the development and the other team only for operations these two have different incentives that make it hard for them to work together.
- Security - Just like the operations team make sure the stability of the system, the security team also evaluates the changes made to make sure it does not affect the system’s security, which is a slow process. As we know DevOps is about removing any roadblocks that slow down the process, hence it includes this one.
- Application testing - Similar to the security team in some projects there are separate teams or roles for application testing and often these tests are done manually when teams cannot rely on their automated tests, which slows down the process.
- As mentioned before, many tasks used to be done manually, making the process slow and error-prone.
So here we see the fundamental characteristic of all these issues is that they all slow down the release cycle.
We also see that with security and testing DevOps may even go over only Development or only operations responsibilities and tasks and that’s why to understand DevOps instead of focusing on its name and what it means, we should focus on what it tries to achieve.
- DevOps tries to remove all these roadblocks and things that slow down the release process.
- Instead of manual inefficient processes helps create fully automated streamlined processes for the release cycle.
What is DevOps?
Well, by the official definition -
DevOps is the combination of cultural philosophies, practices and tools that increases an organization’s ability to deliver applications and services at high velocity.
So DevOps is not just one set of tools or one specific concept of releasing the software fast and with high quality.
The central part was that development and operations teams should work together more often.
But wait, what on earth does that mean and how does it work in practice?
Since it’s not specific enough so naturally, different companies started implementing DevOps in different ways.
Hence, the actual implementation of DevOps looked pretty different from company to company but, since companies started adopting it. It gradually got a more concrete form with some of the common patterns across many companies. One of these patterns was that DevOps evolved in an actual role called a DevOps Engineer.
Where either -
- Developers are doing DevOps as a job next to development or Operations is doing it.
- Or someone is doing it exclusively as their only job.
Now the crucial question is how to become a DevOps Engineer.
DevOps in Practice
Tools and concepts one needs to learn as a DevOps Engineer -
Concepts of Software Development - As a DevOps Engineer, you are not Going to build an application but you need to understand the concept of -
- how developers work
- which git workflow they are using
- how to configure the application
- concepts of automated testing and so on.
Operating System and Linux basics - Now that application needs to be deployed on a server so that eventually users can access it. Hence we need some kind of infrastructure, and you as DevOps Engineer might prepare the infrastructure to run the application. Since most servers run on the Linux Operating system, Hence you need -
- Basic understanding of Linux
- To be comfortable using CLI
- Shell Commands
- Understanding Linux file system
- Understanding of server management
Networking and Security - Also need to have a basic understanding of Networking and Security -
- Firewall, Proxy Servers
- Load Balancer
IP, DNS Name Resolution
However, to draw a line between IT Operations and DevOps one does not have to have advanced Networking and security skills.
Containers - Nowadays as containers have become the new Standard for software packaging models. This means you need to understand the concept of -
- Virtualization & containers
- Managing containerized applications on a server
Docker as it is one of the most popular container technology
Responsibility of a DevOps Engineer -
So now on one side, we have Developers who are creating new features and bug fixes and on the other side; we have infrastructure or servers which are managed and configured to run the application.
but the question is how to get these features and bug fixes from the development team to the operation team to make them available to the end users.
So how do we release the new application versions?
That’s the major task and responsibility of the DevOps Engineer, and with DevOps, the question is not just how to do this but how we do this continuously and in an efficient, fast and automated way.
Therefore, we need to learn how to Build Automation & CI/CD pipelines.
- Infrastructure as a Service - Nowadays many companies are using virtual infrastructure on the cloud instead of creating and managing their physical infrastructure these are infrastructure as service platforms like AWS, Google Cloud, Asure etc, you need to learn at least one of those.
Container Orchestration - Now our application will run as a container and containers need to be managed. For smaller applications, docker-compose is enough but if you have a lot of containers, you need a more powerful Container Orchestration tool most powerful of which is Kubernetes. So you need to understand -
- How Kubernetes work
- How to administer and manage the cluster
- How to deploy the application in it
Monitoring - One of your responsibility as a DevOps Engineer may be to set up monitoring for your running application, the underlying Kubernetes cluster and the servers on which the cluster is running to track performance and discover problems.
Infrastructure as Code - In our project we will need the same deployment environment multiple times for Production, testing and development. Creating infrastructure for one environment already takes a lot of time and is very error-prone. So, we don’t want to do it manually multiple times. Since we want to automate as much as possible.
Now, we can do this by using the combination of two types of Infrastructure as code tools -
- Infrastructure provisioning tools like Terraform
Configuration management tools like Ansible, CHEF, etc
So you as a DevOps engineer should now one of these tools to make your work more efficient as well as to make your environment more transparent so that you know exactly in which state it is so that it’s easy to replicate & recover.
Besides, all the above things you also need to learn -
- Ene Scripting language as you will work closely with developers and system administrators
- Version control to manage your code
That is all for now, Thank you for reading. I hope this Blog was helpful and you could take something out of it.
Everything mentioned in this Blog is from the YouTube video that I watched
If you find this Blog useful, check out her video for an even better understanding.