A High Level isn’t? ☹ Let’s go back and understand first, What led DevOps to come into existence?
Waterfall:--
Waterfall Model, the most traditional project management technique. This consist of phases like Requirement Gathering, Documentation, System Design, Implementation, Testing, Delivery/Deployment & Maintenance.
The challenges with this approach is "Each team work in silos". Knowledge sharing becomes difficult and communication is equally limited. The result comes with delays due to confusion around what each team is doing. The biggest problem with this approach is that the customer's needs usually change during the development phase. Thus, we may end up delivering software that doesn't meet the revised needs OR we spend a lot of time and money in changing plans midway.
Agile:--
Agile model, the next phase in the evolution. The idea in Agile is to develop software in small iterations and be able to adapt to the changing customer needs better than in Waterfall.
Agile software development approach, under which requirements and solutions evolve through the collaborative effort of self-organizing and cross-functional teams and their customers. The goal is to have the team working together including all stakeholders (Business Analyst, Engineers, DBA, QA, Design etc.). The expectation is that we have much better communication throughout the entire Project Lifecycle.
Challenges with Agile Model:--
- The budget goals and deadlines are often missed.
- Completed software components are not compatible which each other.
- New features may break old functionalities.
- Less cooperation between Development and IT Operations Team.
DevOps:--
The newest approach in project delivery is DevOps (A merge of Development and Operations). DevOps takes what is good about agile and builds on it with the new approaches. (like Developers & Operations collaboration, Automation, Continuous Delivery.)
The powerful component of DevOps is Automation. Wherever possible, all features are automated. Testing, code deployment, communication, network resources, and scaling to meet customer demand. Through Automation, it can scale the effectiveness of the team and also eliminate human error.
The ultimate goal is to move to a Continuous Delivery model. Rich, cross-functional teams that are continually assessing and validating customer engagement and speeding up delivery with automation, opens the door to faster releases.
Goals of DevOps?
- Achieve Faster time to market.
- Improve mean time to recovery.
- Improve deployment frequency.
- Lower failure rate of new releases.
- Shorten lead time between fixes.
DevOps Phases:--
1) Continuous Development:--
This phase is the development practice of running every code change through automated tests, creating successful application builds, and promoting them up to production stage using automated deploys (Using tools such as Git, SVN and JIRA etc.).
2) Continuous Testing:--
Continuous testing in DevOps is an essential part of building software solutions, that represents the process of executing automated tests enabling to provide continuous feedback on business risks in the latest application build (Using tools like Selenium, TestNG, JUnit/ NUnit etc.).
3) Continuous Integration:--
Continuous integration is the practice implying app development teams to frequently integrate new or changed code into a shared code repository. Then each check-in is verified by an automated build, enabling developers to identify and correct errors immediately. The most popular tool is Jenkins and other tools like Bamboo and Hudson etc.
4) Continuous Deployment:--
It is a strategy for software releases wherein any code commit that passes the automated testing phase is automatically released into the production environment, making changes that are visible to the Users.
We also need to understand little bit of Configuration Management tools Or Containerization tools, without which DevOps will be incomplete. Both set of tools here help in achieving Continuous Deployment (CD).
Configuration Management Tools
This helps in establishing and maintaining consistency in an application's functional requirements and performance. In simpler words, it is the act of releasing deployments, scheduling updates keeping the configurations consistent across all the severs. Most Popular Configuration Management tools are Puppet, Chef, Ansible, and SaltStack.
Containerization Tools
Containerization tools help in maintaining consistency across the environments where the application is developed, tested and deployed. It eliminates any chance of errors/failure in production environment by packaging and replicating the same dependencies and packages used in Development, Testing or other Staging environment. (Most popular Containerization tool is Docker.)
5. Continuous Monitoring:--
Continuous monitoring is the practice, used for defining risks and weaknesses in the application. The product is under constant monitoring which allows engineers to correct errors on time and make required improvements. The result is high-quality software that meets customer’s needs and expectations. (Most popular monitoring tools are: Splunk, ELK Stack, Nagios, Sensu, NewRelic.)
Graphical Representation of Basic DevOps Flow:--
Key Components of this Architecture:--
Source Code Repository (Tools like GitLab, GitHub, Bitbucket, SVN, TFS etc.):-- Repository is used to manage projects, set of files as they change over the time. Developer will connect to Source Code Repository and push their changes. Other developers can check out the code from the Repository and start working on the files. It is helping development team members to work in sync and to achieve good quality product.
Build Tool (Tools like Ant/Maven/Gradle etc.):--Using any of these Build Tools, the package can be created, which is required in deploying the changes at App Server. Developers create Build Script (which in turn generate Package) & writing some Unit Test Cases (for Testing). Devops team will execute the Build Script to build the Package.
SonarQube Server:-- This helps in checking the Code Quality/Code Review process. Humanly, it may be challenging to read all source codes, Automation Tools as Code analyzer will be helpful.
Artifact Repository:-- Artifact repositories, are used to store, organize and distribute artifacts (i.e. binary files & its metadata) in a single centralized location. This reduces the amount of time spent downloading dependencies from a public place. Tools like Nexus will store the Build Artifacts (.jar/.war/.ear files etc.).
Continuous Integration (Tools like Jenkins/Bamboo etc.):-- This will help to integrate all the components. It will take the code from GitHub, execute Unit Test Cases, create the package (with the help of Build Tool). The package will now store in Nexus (Artifact Repository), SonarQube Report will perform Code Review Process and finally it will deploy the changes to the dedicated server. An email notification will be triggered to the developer, if any failure within the process.
Deployment Tool ( Tools like UCD/Ansible/Chef/Puppet etc.):-- It is also called Configuration Management Tool. It will first configure the target servers, get the package details (.jar/.war/.ear files etc.) from CI Tool and deploy the changes to all Application Servers.
Monitoring:-- Monitoring is as important as Developing the application because there will always be a chance of bugs which could remain undetected during the testing phase. This gains end to end visibility across customer experience and dynamic infrastructure. It allows DevOps team to reduce the time for monitoring applications.
Application Performance Monitoring – APM tools allow to automatically detect & create alerts about hotspots in application framework (include the application and database layers.). Examples like New Relic, AppDynamics, DataDog.
Infrastructure Monitoring – Tools will automatically detect and alert about degradation in underlying physical or virtual resource performance and availability. Examples like AWS CloudWatch, Nagios, Zabbix, Sensu, Icynga.
Support Team:-- When developers launch new features and services, it's the support team that deals with issues and interactions with stakeholders.
If the application is not working, An Incident will be created and email notification will be sent to Support Team. It will segregate the issues like Infrastructure & Application Related.
Ticketing Tool ( Tools like JIRA/ServiceNow etc.):-- It is a great way to manage a queue of ongoing requests. Tools like this, will create the Ticket, assign it to respective team (i.e. assign Ticket to Development Team for Development Issues, Infra related issues, it is DevOps Team).
Summary
DevOps can be defined as an alignment of Development and IT operations with better communication and collaboration with an intent to increase the organization's speed to deliver applications & services at high velocity. It is a cultural shift in how Software are built through various stages like Continuous Integration, Continuous Development, Continuous Testing, Continuous Deployment & Continuous Monitoring. There may be lots of other DevOps practices available, but the motto of this blog is to share the "Basic Overview & How it works?" targeting the Junior IT professionals. Hope it was satisfactory. You can reach out through Comments or via Linkedin.
No comments:
Post a Comment