DevOps

DevOps is Union of people, products (tools), practices and processes. Its not a product (tool) to get installed, not an automation, not an infrastructure as code. Its just people following a process enabled by products to deliver a value to end users.


7 DevOps Practices
→ Configuration Management
→ Release Management
→ Continuous Integration: Forces developers to integrate code at early stages. Improve productivity of developers. Identifies bugs and issue at early stage. Faster delivery of software updates. During the Continuous Integration process unit tests are executed during the build.
→ Continuous Deployment/ Delivery: Ensuring that software can be reliably released at any time.  Continuous Delivery does not focuses on manual delivery pipeline. Continuous Delivery encourages configuration as code. Continuous Delivery is a software engineering approach in which teams produce software in short cycles, ensuring that software can be reliably released at any time.
→ Infrastructure as Code
→ Application Performance Monitoring
→ Test Automation


DevOps Metrics
Agility Performance Indicators:
1. Deployment frequency: How fast can we deploy the code?
2. Change lead time: How fast can you make code change and deploy the code?

Reliability Performance Indicators:
1. Change fail rate: How often do we fail when we push a new change?
2. Mean time to detect and repair (MTTR): How fast we can identify issue in production, repair and deploy again.

→ Cycle Analytics: Measures the time taken to go from an idea to production for each project we have
→ Defect Density: Defects detected divided by total lines of code or number of components
→ Cycle Time: Period required to complete one cycle of an operation, function, or process


Source Control or Version Control in DevOps
The management of changes to documents, programs, large web sites, and other collections of information.
• Source code
• Environment definition
• Infrastructure definition
• Deployment scripts
• Documentation

Branching Strategy: This is accomplish following three goals
1. Minimize conflicts, when merging code
2. Track code changes, in the development pipeline
3. Add a degree of separation,  between code at different stages of development.

Feature Flags ensure that code deployed to production environment is not necessarily released to all end users


 Continuous Testing
Execution of tests repeatedly against a code base and deployment environment. Continuous testing is the most difficult part of a continuous delivery pipeline to keep up to date.
Types of Testing
• Unit Testing
• Integration Testing
• Functional Testing
• Smoke Testing
• Regression Testing
• User Interface (UI) Testing
• Load and Performance Testing
• Manual and Exploratory Testing

Benefits of Continuous Testing
• Quality gates throughout the pipeline
• Increases confidence in code long before production

In Manual Integration Testing Human Intelligence is waged against the application.
Integration testing tests components together in scenarios.


Defining a Build Pipeline
A build pipeline is an automated system responsible for Continuous Integration. It builds code, runs unit tests, creates packages etc.
Build Pipeline is the automated system used for continuous integration (Build Code , Create Packages and Run Code.


Infrastructure as Code
When infrastructure is treated as code, the knowledge of deployment, configuration management and provisioning are not confined just to System Admins. They can be a developers task.
Configuration Management: Management of configuration of all environments for an application. Typically in the form of scripts and they are version controlled.
Configuration Drift: The process where servers running in an infrastructure become different over a period of time due to human induced changes. This can be opposed by rebuilding machine instances frequently and make use of automated configuration tools and run them at regular intervals to keep the machines in sync.


Release Management
Release Management is the process of managing, planning, scheduling and controlling a software build through different stages and environments; including testing and deploying software releases. What is released; How is it released; When is it released. 


Deployment Pipeline
This is the automated manifestation of the process for getting software from version control into the hands of users. Responsible for continuous delivery. 

The build pipeline and deployment pipeline can be considered two different concepts, but in many systems the same tool orchestrates both.


Application Performance Monitoring
Application Performance Management (AM) is the monitoring and management of performance and availability of software applications.
Types of Monitoring: Usage; Availability; Performance; Customer