DevOps is a term that is used to describe the collective working culture of the Software Development and the Operations teams which enhances not only the rapid and continuous integration and delivery of the software but also the Client-Business relationship compared to any other traditional software Entity.
Why is there a need for DevOps?
The Development team focuses primarily on fixing pre-existing features or developing new features as per the client requirement. The Operations team majorly focus on attaining consistency of the software across the varied infrastructure. Now in case of a Traditional Software Development Process, these two teams can be visualized as two seperate leagues where the former is oriented towards change and the later oriented towards stability. These are two logical extremities adapted for a common goal i.e delivery of the product to the client. Thus, quite often there are clashes between these leagues as it becomes difficult for either of them to understand the perspective of the other.
This gave rise to the culture of DevOps where these two seperate leagues connect together for a common cause. Most of the organizations allocate another team of professionals to deal with the tasks of DevOp whereas few organizations have the developers take up certain parts of the operational work too such as setting up the production environment, pushing changes to the production pipeline, etc. Such a team is called as a 'Cross-functional' team.
Advantages of DevOp include:
Phases of a DevOps Lifecycle[1] :
There are 8 different phases as shown along the infinity curve depicted in the image below. At the project initiation, the plan phase comes first followed by the other phases. This infinity indicates as long as the product exists, all of these phases are iterated lifelong.
The task involved in each phase is indicated as tags shown. For example, the Code Phase includes the initial writing of the source code and its version control before the first release as well as at subsequent iterations of the lifecycle.
Common Terminologies used in DevOps:
Read Next: Exploration of Docker for container management by developing a simple containerized application.
References:
Why is there a need for DevOps?
The Development team focuses primarily on fixing pre-existing features or developing new features as per the client requirement. The Operations team majorly focus on attaining consistency of the software across the varied infrastructure. Now in case of a Traditional Software Development Process, these two teams can be visualized as two seperate leagues where the former is oriented towards change and the later oriented towards stability. These are two logical extremities adapted for a common goal i.e delivery of the product to the client. Thus, quite often there are clashes between these leagues as it becomes difficult for either of them to understand the perspective of the other.
This gave rise to the culture of DevOps where these two seperate leagues connect together for a common cause. Most of the organizations allocate another team of professionals to deal with the tasks of DevOp whereas few organizations have the developers take up certain parts of the operational work too such as setting up the production environment, pushing changes to the production pipeline, etc. Such a team is called as a 'Cross-functional' team.
Advantages of DevOp include:
- Easier collaboration between the teams with an increased sense of communication and trust.
- Faster resolution of problems that are encountered throughout the product lifecycle and thus mitigate risks.
- Timely delivery of the end product by the business as well as accelerate towards fully automated continuous integration and delivery.
- Better knowledge base of cross-functional teams as they know how both the leagues work.
- Better maintenance strategies can be adapted.
- Overall quality of product is enhanced.
- Currently there is a limited availability of DevOp professionals in the market
- A seperate team of professionals increase the Cost to Company.
- Certain tasks which is solely to be performed by the developing team such as manual testing or the operations for that matter are ignored at the view that the DevOps will take care of it which later causes chaos.
- In case of a cross-functional team, there is increase in complexity and no standarization.
Phases of a DevOps Lifecycle[1] :
There are 8 different phases as shown along the infinity curve depicted in the image below. At the project initiation, the plan phase comes first followed by the other phases. This infinity indicates as long as the product exists, all of these phases are iterated lifelong.
The task involved in each phase is indicated as tags shown. For example, the Code Phase includes the initial writing of the source code and its version control before the first release as well as at subsequent iterations of the lifecycle.
Common Terminologies used in DevOps:
- Continuous Integration (CI): It is a devOps practice that continuously integrates the newly pushed commits to the central repository thereby ensuring the application remains unbroken.
- Continuous Delivery (CD):It is again a devOps practice that continuously delivers the software at the production environment where releases happen manually. It is generally regarded as the extended version of CI.
- Continuous Deployment :It is again a devOps practice that continuously deploys the software to the customers as and when a release is automated instead of being manual as in case of CD. Therefore, it is now an extended version of CD.
- Blue-Green Deployment: A deployment strategy which helps us to compare, test and analyse two different versions of the application. The newer one (green) and the current live application (blue). Once the newer version is satisfactorily working, the current traffic is shifted from the blue to the green.
- Infrastructure as a Code (IaaC): It involves the provisioning and management of servers, storage and network entities in a similar way to that of an application when coded but at a large-scale.
- Automated Testing: A It is primarily afunctional testing methodology which includes very little to no human interference. There are different softwares and tools available to do the same.
- Jenkins: A freely available automation tool that is used for building and testing the applications through a CI/CD Pipeline.
- Docker: A container engine which can handle different containers, environments where we build Docker images and run the containers by leveraging the Jenkins CI/CD pipeline.[2]
- Kubernetes: An open-source technology that helps us to deploy and scale our containerized application irrespective of whether the enivronment is physical/virtual/cloud.
- Selenium: An automation testing tool which helps us carry out UAT and other Functional testings. In order to perform any non-functional test on selenium, one must transform it to an automated test
- Ansible: A configuration management tool which automates the process of installation and configuration of programs at many servers.
- Nagios: One can monitor the systems, networks and infrastructure using Nagios.
Read Next: Exploration of Docker for container management by developing a simple containerized application.
References: