Feb. 2, 2023

DevOps

#101

What is the problem to be solved?

Are you looking to learn about DevOps? In the world of software development, the Agile model has been the go-to methodology for years, but there is a problem. The Agile model is fantastic for developing applications quickly, but the gap between the development team and the operations team can cause significant delays in delivering those applications.

This is where DevOps comes in. DevOps seeks to bridge the gap between development and operations teams by integrating them, resulting in better communication and collaboration. The aim is to decrease the system development lifecycle while maintaining continued feedback with business objectives.

Moreover, everything should be automated and scripted using tools that enable a faster share of resource versions and allow for quick testing. This helps ensure that the application is reliable, scalable, and secure.

DevOps is also a combination of tools that involve continuous integration and continuous delivery. Continuous integration means that code is frequently merged into a shared repository and tested, while continuous delivery ensures that the application is always ready for release, which makes it easy to get new features and fixes out to users.

By embracing DevOps, development and operations teams can work together more effectively and deliver applications more efficiently. This, in turn, leads to happier customers and a better bottom line.

Advantage

✅ Time taken to develop and deliver software is reduced. (Compared to Waterfall model)

✅ Complexity of maintaining an application is reduced because you are automating and scripting out your entire environment.

✅ Improved collaboration between developers and operators. Improvement communication between teams. Members of each team need to work cohesively  together.

✅ Continuous Integration and Delivery ensure faster time to market. In this way, the consumer is constantly being delighted.

DevOps Phases

According to DevOps practices, the workflow in software development and delivery is divided in 8 phases.  

1. Plan

In this stage, business owners and software development team discuss project goals and create a plan.

2. Code

Programmers design and code the application. The point is to use tools like Git that enable every developer to have the current and the latest version of the code and publish changes to everyone to see.

3. Build

Take code from different repositories and combine them to build a complete application. The focus here is to build out an environment using automation tools or scripts.

4. Test

Automation testing to ensure software quality. Usually using tools like Zuul or Github Actions.

5. Release

Once tested, integrate automatically to the code. For example: Jenkins, Zuul.

6. Deploy

Application is packaged after release and deployed from developer server to production server.

7. Operate

Once software is deployed, the operation team performs activities as configuration servers and provisioning them with the required resources. Using tools like: Ansible, Chef, Docker.

8. Monitor

Monitor the entire environment. Monitoring allows IT organizations to identify specific issues of specific releases and understand the impact to end users.

CI/CD

Continuous integration

♦️ Get rid of merge hell: use a tool for to sync the work between devs ♦️ Testable build: We have automation to keep an eye on the code: every time there's a change, take the code, build it and test it. If something fails, email the team and go back to code if it works keep it for the next release.

Continuous delivery

How do I quickly get code into production?

♦️ Deploy (Auto deploy)

1. Convert code into software with the build process.

2. Testing in a QA environment

3. Stage environment.

4. Go to production


♦️ Configuration management tools help to maintain consistency in applications functionality, requirements and performance. Above all these tools help releasing deployments to servers or scheduling updates on all the servers and keeping the configuration consistent across all the servers. Examples of this are: Chef, Puppet and Ansible.

️♦️ Containerization tools keep consistency across deployment tests, staging as well as production environment. Besides that, also help scaling up and down of instances.

♦️ Continuous Monitoring tools help you monitor the application performance and check the health of the system proactively.

 

Thanks https://www.youtube.com/watch?v=Me3ea4nUt0U