# DevOps Concepts

## DevOps

DevOps is a software development methodology. It mainly merges Development and Operation components in the Software Development lifecycle. The important aspect of DevOps is to deliver software faster.

Example  
For Instance, Developers build a new feature for the E-commerce platform like adding an order tracking feature but operations are not sure to release it may cause performance issues. With the DevOps approach, we can reduce the risks with the proper configuration of resources.

## SDLC Models

Software Development Lifecycle - it is a process that defines Planning, Creating, testing, deploying, and maintaining software applications.

Example  
Let's take Google Maps, When we need to travel from Point A to Point B we use Google Maps. This enables us to save a lot of time or else we need to manually follow the signs to get the destination Like wise SDLC provides a road map to develop software applications.

1. **Lean SDLC**: It focuses on delivering the most value to users as quickly as possible.
    
2. **Information Technology Infrastructure Library SDLC**: It is the Standardized framework for IT service management.
    

* service strategy
    
* service design
    
* service transition
    
* service operations
    
* continual service improvement
    

3. **Agile SDLC**: Iterative process and incremental development with continuous feedback. It mainly focuses on adapting to change requirements. This means frequent releases and rapid feedback cycles.
    

### Why DevOps is important?

DevOps leverages Agile methodologies to foster collaboration between development and operations teams. From the Business point of view, DevOps increases the revenue and faster version upgrades of software.

### History behind DevOps

In 2009 DevOps concepts came into the picture, it is a huge cultural shift in the IT industry.

### DevOps stakeholders

Development Team

Operations Team

Security Team

Product Owners

Observability Engineer

Cloud engineer

### Important terminologies Used

CI/CD

Infrastructure as Code(IAC)

Configuration Management

Version Control system

Repository

Continuous Testing

Deployment

Monitoring

DevSecOps

Observability

Provisioning

### DevOps and Agile

Following are the benefits achieved with the combination of DevOps and Agile.

* Faster Delivery
    
* Improved Quality
    
* Increased Reliability
    
* Better Collaboration
    
* Adaptability to change
    

### DevOps Tools

DevOps Practices can be achieved with many technologies, while new frameworks will be released in the market regularly but the Tools will be standard.

| Tools | Technologies | Use Case |
| --- | --- | --- |
| Version Control System | Git, Subversion | Track Code Changes Overtime |
| CI/CD Pipeline | Jenkins, GitLab CI/CD, Circle CI, Travis CI | Automate building, testing, and deploying code changes |
| Configure Management | Ansible, Puppet, Chef | Manage Configuration of Servers |
| Infrastructure As Code | Terraform, AWS Cloud formation, AWS CDK, Azure Resource Manager | Define and manage infrastructure as code files. |
| Containerization | Docker, Kubernetes | Packaging applications with all their dependencies into standardized units for easier deployment. |
| Monitoring and observability | Prometheus, Grafana, ELK Stack, Cloud Watch | Continuously monitor the performance and health of the application and infrastructure. |
| Security | SonarQube, Nexus Repository | Integrate Security Considerations, and fix security vulnerabilities in Code. |
| Communication | Slack, Microsoft Teams | Facilitates the communication between developers, the operation team, and other cross-functional teams. |
| Ticketing Tools | Jira, Service Now | to manage workflow |
| Documentation | Confluence | Acts as a central hub for all the company documents. |

### Configuration Management

Configuration management is an approach to establishing the desired state of IT systems, Software applications, and infrastructure components.

Example  
Imagine a company website is hosted on multiple web servers. To Set up and run a website we should need a desired state of system

The following are the requirements to achieve desired state

* Operating System: Ubuntu 20.04
    
* Web Server Software: Apache 2.4
    
* Document Root: /var/www/HTML
    
* Security Settings: Firewalls enabled with specific ports open (e.g., port 80 for HTTP access)
    
* PHP Version: 7.4
    

Manually configuring this will be prone to error so we leverage tools like Ansible to achieve the desired state of the servers.

### Continuous Integration and Deployment

Continuous Integration: It's a process where developers merge their code changes into a central repository, followed by automated builds, tests, and feedback loops.

Example  
we use Jenkins as a continuous integration tool. To achieve CI we setup pipeline that we can build stages that compile the code and test it.

Deployment: It is the last step of the continuous integration process, usually passes all the tests and deploys the code into the desired environment - Testing, staging, and production.

Example  
Web application update, Mobile App update
