DevOps - Getting Started
Tags: devops, cloud, tutorial, beginners
Published: 2022-10-08 20:57:05

### What is DevOps?

The simple definition for DevOps is -
> DevOps is a set of practices that combine software development and IT operations. It aims to shorten the system development lifecycle and provide continuous delivery with high software quality.

---

### Why DevOps? (Need of DevOps)

The current most popular methodology widely used in organisations is Agile.
But the agile methodology mainly focusses on the product (software) development and not on the release/deployments (servers/infra).

---

### Benefits of DevOps Methodology

* deployment becomes efficient (at least 50% faster)
* less failure
* better recovery time

---

### DevOps CAMS

* **C** for Culture

Culture is most important in DevOps. This will bring a whole set of practices such as :

* the use of Scrum,
* the presence of silos, 
* teams collaborations.

In DevOps, People are valued over process over tools.

**Note**: Don't try to copy the practices of other organisations just because it works in their organisations.

* **A** for Automation
Implement automation where ever things are replicated.
When we talk about automation, we think about the notions of:

* “infrastructure as code” (for this we can use tools like Ansible or Chef)
* continuous delivery pipelines (here we are talking about Jenkins for example).

Continuous delivery pipelines are in fact in two parts: Continuous Integration and Continuous Deployment.

* **M** for Measurement
The continuous improvement process (Kaizen) is at the heart of DevOps. But for that, it is still necessary to be able to know if one has improved and to be able to prove it. No miracle, measures are the key, because decisions must be made on facts, data, not opinions.

* **S** for Sharing
Sharing has three components:

* the visibility
* the transparency
* knowledge transfer

Visibility allows everyone to see progress in other parts of the organisation. Specifically, visibility allows you to know if one team's work might cause problems for another team. It also enables early feedback, so bugs are caught sooner rather than later.

Transparency allows everyone to work towards a common goal.

Knowledge transfer aims to evade constraints (maybe by sharing knowledge between team) within an organisation and promote collective intelligence (the fact that we are more intelligent collectively than individually).

---

### DevOps - Three Ways

* **Flow Thinking**

Work always flows in one direction – downstream

![Flow Thinking](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rulf26q237zuypwsoaqo.png)


* **Amplify Feedback**

Outcomes of this journey include understanding and serving all internal and external customers, shortening and strengthening all feedback loops, and embedding knowledge where it is needed.

![Amplify Feedback](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wy2xy2c505ktymmyq4rr.png)


* **Experiment and Learn**

This path aims to build a culture that encourages two things: _Continuous experimentation, taking risks and learning from mistakes_. Understanding that repetition and practice are prerequisites for mastery. 
This is Risky way as failure chances are high

![Experiment and learn](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0t1nvbdfuuii9vkncxjf.png)

---

### DevOps Lifecycle

![DevOps Lifecycle](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uv3y4zzicc799q9hq0uw.png)

---

### DevOps Terms

* **Provisioning :** Server is ready with OS, software and networking.

* **Deployment :** Adding or upgrading software on server.

* **Orchestrations :** Coordinated operations on multiple systems. e.g. Kubernetes is an Orchestration tool

* **Configuration Management :** Managing server configuration via files such as Ram, space, depending software etc. 
e.g. terraform

* **Imperative (Procedural) :** command(step by step approach) to produce a desired state. 

* **Declarative (Procedural) :** desired state is defined and tools will achieve it.

* **Idempotent :** repeat execution and same result.

* **Continuous Integration :** build and unit test at every check-in.

* **Continuous Delivery :** deploy on production live environment at every check-in.

* **Continuous Deployment :** after unit testing, deploy changes to production in small batches.