## DevOps for absolute beginner📝

## 1. What is DevOps 🙄


If we break the word “DevOps” we notice two different combination i.e. “Dev” and
“Ops”. The turm dev refer to as development, and the turm ops refer to as operation.
The Development is responsible for development, design &amp; building the application. In
other hand s operation is responsible for deployment, testing of application. It is the
technology to shorten the system development lifecycle and provide continuous
delivery with high software quality.

## 2. Is it suitable to learn DevOps for student/beginner in tech industry/ other stream of academic education🤷‍♂️🤷‍♀️


First of all the answer is absolutely yes🎉. In case of my prospective any one can learn
DevOps either he/she a student, working professional, beginner in tech industry or
other stream of academic education with some computer literacy.

<iframe src="https://giphy.com/embed/YS5iInw1xfzdwj3vcG" width="480" height="286" frameBorder="0" class="giphy-embed" allowFullScreen></iframe><p><a href="https://giphy.com/gifs/news-alexey-navalny-yes-absolutely-YS5iInw1xfzdwj3vcG"></a></p>

## 3. What is DevOps do✒✏


DevOps is the combination of culture, philosophies, practices and tools that deliver
applications and service at high velocity, evolving and improving products at a faster
pace than organizations using traditional software development and infrastructure
management processes.

## 4. Lifecycle of DevOps 🚲


In case of DevOps lifecycle there are 7 stages in DevOps that are mention below:


![DevOps-Steps-1.gif](https://cdn.hashnode.com/res/hashnode/image/upload/v1654846180367/Rng64p85u.gif align="left")

**Continuous Development:**

Tools Used: Git, SVN, Mercurial, CVS
![download.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1654783681626/7gFFIt-oP.png align="left")
> This is the phase that involves ‘planning‘ and ‘coding‘ of the software. You decide the project vision during the planning phase and the developers begin developing the code for the application.
There are no DevOps tools that are required for planning, but there are a number of tools for maintaining the code.The code can be in any language, but you maintain it by using Version Control tools. This process of maintaining the code is known as Source Code Management.After the code is developed, then you move to the Continuous Integration phase.



**Continuous Integration:**

Tools: Jenkins, TeamCity, Travis 
![Continuous-Integration_Blog-486x300.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1654783975331/QfF4sLxG2.png align="left")
> This stage is the core of the entire DevOps life cycle. It is a practice in which the developers require to commit changes to the source code more frequently. This may be either on a daily or weekly basis.You then build every commit and this allows early detection of problems if they are present. Building code not only involves compilation but it also includes code review, unit testing, integration testing, and packaging.The code supporting new functionality is continuously integrated with the existing code. Since there is a continuous development of software, you need to integrate the updated code continuously as well as smoothly with the systems to reflect changes to the end users. In this stage, you use the tools for building/ packaging the code into an executable file so that you can forward it to the next phases.



**Continuous Testing :**

Tools: Jenkins, Selenium TestNG, JUnit
![Continuous-Delivery-Continuous-Delivery-Edureka.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1654784097615/OvwYMv0jv.png align="left")
> This is the stage where you test the developed software continuously for bugs using automation testing tools. These tools allow QAs to test multiple code-bases thoroughly in parallel to ensure that there are no flaws in the functionality. In this phase, you can use Docker Containers for simulating the test environment.Selenium is used for automation testing, and the reports are generated by TestNG. You can automate this entire testing phase with the help of a Continuous Integration tool called Jenkins.Suppose you have written a selenium code in Java to test your application. Now you can build this code using ant or maven. Once you build the code, you then test it for User Acceptance Testing (UAT). This entire process can be automated using Jenkins.



**Continuous Deployment:**

Tools Used:Chef, Puppet, Ansible, Docker, Vagrant
![c-2-528x201.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1654784325050/XuKPwARtz.png align="left")
> This is the stage where you deploy the code on the production servers. It is also important to ensure that you correctly deploy the code on all the servers. Before moving on, let us try to understand a few things about Configuration management and Containerization tools. These set of tools here help in achieving Continuous Deployment (CD).



**Configure Management:**

> Configuration Management is the act of establishing and maintaining consistency in an application’s functional requirements and performance. Let me put this in easier words, it is the act of releasing deployments to servers, scheduling updates on all servers and most importantly keeping the configurations consistent across all the servers.

**Containerization:**

> Containerization tools also play an equally crucial role in the deployment stage. The containerization tools help produce consistency across Development, Test, Staging as well as Production environments. Besides this, they also help in scaling-up and scaling-down of instances swiftly.



**Continuous Monitoring:**

Tools Used: Splunk, ELK Stack, Nagios, New Relic
![Picture12-1-528x240 (1).png](https://cdn.hashnode.com/res/hashnode/image/upload/v1654784755646/Fw9VriVSb.png align="left")
> This is a very critical stage of the DevOps life cycle where you continuously monitor the performance of your application. Here you record vital information about the use of the software. You then process this information to check the proper functionality of the application. You resolve system errors such as low memory, server not reachable, etc in this phase.This practice involves the participation of the Operations team who will monitor the user activity for bugs or any improper behavior of the system. The Continuous Monitoring tools help you monitor the application’s performance and the servers closely and also enable you to check the health of the system proactively.

## 5. How DevOps related to open Source 🌍


DevOps tools are all open source, and enable everything from container builds and
orchestration to micro services networking, configuration management, CI/CD
automation, full-stack monitoring and more.

## 6. It is a free or not💸


To apply DevOps we need cloud dervice of a specific cloud service provider. Some of
these are AWS, GCP, Azure cloud, alibaba cloud service etc. This cloud service provider
are not free at all. The charges, term &amp; condition, license duration are different each
cloud service providers. But the tools that are use in cloud service all open source.

## 7. How DevOps related to cloud computing ☁💻


Many folks combine DevOps and cloud computing as one and the same. The answer is
partially “yes” and partially “no”. Because they are related but they are actually two
different job roles and different areas of IT industry.

## 8. Who is a DevOps Engineer 👨‍💻👩‍💻



![Who-Is-A-DevOps-Engineer-DevOps-Engineer-Edureka-1.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1654785114103/lBFQGM0dK.png align="left")
DevOps Engineer is somebody who understands the Software Development Lifecycle and has the outright understanding of various automation tools for developing digital pipelines (CI/ CD pipelines).DevOps Engineer works with developers and the IT staff to oversee the code releases. They are either developers who get interested in deployment and network operations or sysadmins who have a passion for scripting and coding and move into the development side where they can improve the planning of test and deployment.

## 9. Reference and Resources🚩


If you want to learn more about DevOps here is some best resources, 
Just check it out⬇

[SRE vs. DevOps](https://spacelift.io/blog/sre-vs-devops)

Thats it for this blog. I hope you will try it out and learn something new. Also incase i have missed something feel free to share your thoughts and feedback. Thanks for reading.

- Reachout to me

[Twitter](https://twitter.com/ADITYA90546170)🔗

[Linkedin](https://www.linkedin.com/in/aditya-das-7b2276202)🔗

[GitHub](https://github.com/ADITYADAS1999)🔗


![Getting-Started-as-a-DevOps-Engineer.jpg](https://cdn.hashnode.com/res/hashnode/image/upload/v1654846463855/LxtWrHnSl.jpg align="left")
