DevOps is a culture that promotes collaboration between the Development and Operations Team to implement the code in production faster in an automated and repeatable way. This culture helps to automate the process and narrow down the gaps between development and IT .
‘DevOps’ is a combination of two words ‘development’ and ‘operations’.
DevOps could be aquite abstract impression that focuses on key principles like Speed, fast Delivery, measurability, Security, Collaboration & observation etc.
Why Industry has adopted so aggressively
The new era is functioning a lot of on AI, ML, Crypto, Big Data, etc. that is taking part in a key role in cloud computing adoption these days, however at identical time, IT professionals say that the safety is their biggest concern in adopting a cloud computing.
Moreover, Cloud helped such a big amount of startups to grow at initial stages and later they born-again as a pacesetter in the market place, that has given confidence to the recent concepts.
Why is DevOps used?
To reduce day-to-day manual work done by IT team to avoid manual error while designing infra Enables a smooth platform for technology or cloud migration gives an amazing version control capabilities. A better way to handle resources whether it’s cloud infra or manpower gives an opportunity to pitch customer a realistic feature rollout commitment to adopt better infra scaling process even though you receive 5X traffic Enables opportunity to build a stable infrastructure and products.
What is Goal Of DevOps?
DevOps goal is wide spreaded and can be lineup as below-
- Control of quality and increase the frequency of deployments
- Allows to enable a risk-free experiment
- Enables to improve meantime to recovery and backup
- Helps to handle release failure without losing live data
- Helps to avoid unplanned work and technical failure
- To achieve compliance process and control on the audit trail
- Alert and monitoring in an early stage on system failure
- Helps to maintain SLA in a uniform fashion
- Enabling control for the business team
How Does DevOps work?
DevOp model usually keeps Development and operation team tightly coupled or sometimes they get merged and they roll out the entire release cycle. Sometime we may see that development, operation and security & Network team is also involved and slowly this got called as DevSecOps.
So the integration of this team makes sure that they are able to crack development, testing, deployment, provisioning infra, monitoring, network firewall, infrastructure accessibility and accountability. This helps them to build a clean application development lifecycle to deliver a quality product.
DevOps workflow ensures that you are spending time on the right things that means the right time is involved in building product/infrastructure. And how it enables can analyze in below diagram. It seems DevOps process in an extended version of agile methodologies, but it doesn’t mean that it can fit in other SDLC methodologies. Once the workflow gets ready, the team puts an effort to keep pushing the releases and at the same time by enabling automation and tools we try maintaining the quality and speed.
I would like to split DevOps values into two groups:
- Business Values
- Organization Values Business values are moreover customer centric
- How fast we recover if there is any failure?
- How we can pitch the exact MRR to a customer and gain more customers?
- How fast we can deliver the product to customers
- How to roll out beta access asap if there any on-demand requirement?
- Organizational Values
- Building Culture
- Enabling communication and collaboration
- Optimize and automate the entire system
- Enabling Feedbacks loops
- Decreasing silos
- Metrics and Measurement
Principle of DevOps
Automated: Automate as much as you can in a linear and agile manner so you can build an end to end automated pipeline for software development life cycle in an effective manner which includes quality, rework, manual work and cost. And it’s not only about the cycle it is also about the migration from one technology to another technology, one cloud to another cloud etc.
Collaborative: The goal of this culture is to keep a hold on both development and operations. Keep an eye and fix the gaps to keep moving thing in an agile way, which needs a good amount of communication and coordination. By encouraging collaborative environment, an organization gets ample of ideas which help to resolve issue way faster. The beauty of the collaboration is it really handles all unplanned and manual work at an early stage which ends up given a quality build and process.
Customer Centric approach: DevOps team always reacts as a startup and must keep a finger on the pulse to measure customer demands. The metrics they generate give an insight to the business team to see the trend stage, usage and burn rate. But of course, to find a signal in the noise, you should be focused and collect only those metrics which really matters.
Performance Orientation: Performance is a principle and a discipline which gives an insight to the team to understand the implication of bad performance. Before moving to production if we get metrics and reports handy it gives confidence to technology and business both. This gives an opportunity to plan how to scale infrastructure, how to handle if there is a huge spike or the high usage, and the utilization of the infrastructure.
Quality Indicators per application: Another set which is a pre-defined principle is to set measurable quality Assigning a quality gate to indicators with pre-defined targets, covering fit for purpose and security gives an opportunity to deliver a complete quality application.
DevOps Key practices:
When we say “continuous” it doesn’t translate that “always running” but of course “always ready to run”.
Continuous integration is nothing but the development philosophy and practices that drive teams to check-in code to version control system as often as possible. So keeping your build clean and QA ready developer’s changes need to be validated by running automated tests against the build that could be a Junit, iTest. The goal of CI is to place a consistent and automated way to build and test applications which results in better collaboration between teams, and eventually a better-quality product.
Continuous Delivery is an adjunct of CI which enables a facility to make sure that we can release new changes to your customers quickly in a sustainable way.
Typical CD involves the below steps:
- Pull code from version control system like bitbucket and execute build.
- Execute any required infrastructure steps command line/script to stand up or tear down cloud infrastructure.
- Move build to right compute environment
- Able to handle all the configuration generation process.
- Pushing application components to their appropriate services, such as web servers, API services, and database services.
- Executing any steps required to restarts services or call service endpoints that are needed for new code pushes.
- Executing continuous tests and rollback environments if tests fail.
- Providing log data and alerts on the state of the delivery.
DevOps automation tool
Jenkins: Jenkins is an open source automation server which is used to automate the software build and deliver or deploy the build. It can be installed through native system packages, Docker, or even run standalone by any machine with a Java Runtime Environment (JRE) installed. In short, Jenkins enables continuous integration which helps to speed up the development. There are ample of plugins available which enable the integration for Various DevOps stages. For example Git, Maven 2 project, Amazon EC2, HTML publisher etc. More in-depth information about the same can be found here in https://jenkins.io/doc/
Ansible: An open-source platform which helps to automate the IT engine, which actually pushes off the slavery work from DevOps day-to-day life. Usually, Ansible helps in 3 day to day task, Provisioning, configuration management and application deployment. Beauty is it can automate traditional servers, virtualization platforms, or the cloud one. It is built on playbooks which can be applied to an extensive variety of systems for deploying your app. To know more, you may have a look at https://docs.ansible.com/ansible/latest/index.html
Chef: It’s an open source config management system and works as a master-client model. It is having a transparent design and works based on instruction which needs to be defined properly. Before you plan using this tool, you need to make sure that you have a proper Git practice going on and you have an idea about Ruby as this is completely built on Ruby. The industry says that this is good to have for development-focused environments and enterprise mature architecture. To know more, you may have a look at https://learn.chef.io/
Puppet: So Puppet works as a master-client setup and utilized as model driven. This is built on Ruby but you can customize this as scripting language somewhere close to JSON. Puppet helps you to get control of full-fledged configuration management. This tool somewhere helps Admin (Part of DevOps) to add stability and maturity towards config management. A more detailed explanation of Puppet and its functionality can be found at https://puppet.com/learning-training/
Docker: A tool designed to help developers and administrators to provide flexibility to reduce the count of the system, as docker don’t create a complete virtual operating system, instead they allow applications to use the same Linux kernel as the system. So somewhere we can say we use Docker to create, deploy, and run applications by using containers. Just a stats submitted by docket that over 3.5 million applications placed in containers using docker and 37 billion containerized applications have been downloaded. Specifically, Docker CI /CD provided an opportunity to have exactly like a live server and run multiple dev infra from the same host with different config and OS. You may visit at https://docs.docker.com/
Kubernetes: Platform developed to manage containerized applications which provide high availability and scalability. According to the usage we can downgrade and upgrade the system, we can perform rolling updates, rollback feasibility, switch traffic between to different versions of the application. So we can have multiple instances having Kubernetes installed and can be operated as Kubernetes cluster. Post this you get an API endpoint of Kube cluster, configure Kubel and you are ready to serve. For more details you can visit at https://kubernetes.io/docs/home/
Conclusion: I have been working closely and observing the DevOps team from a year & so and found every day we learn something new. The more we dive we see a lot can be done and can be achieved in a couple of different ways. As the industry is growing the responsibility of DevOps seems to increase which creates a possible chance for professional but always set a new bar of quality.