What is DevOps? Ultimate Beginner Guides
What is DevOps?
DevOps is Dev + Ops.
Ring any bells? Yes, it is the short word for the combination of the words Development and Operations.
The age-old problem of software delivery
Traditionally, the software development life cycle was a long process and was done phase by phase. However, this approach had significant flaws. Many issues were found only during integration testing, which is almost the last phase before the application goes into production. It gave developers and designers less time to fix the issues, and testers had to sit all night testing the last-minute code fixes.
While the issues were fixed somehow, it was neither a great practice to be followed nor encouraged excellent communication and collaboration between different teams.
Further, the software had to be deployed, configured and tested manually even in a production environment that, too, after the entire development phase was over. It again led to patches and fixes at the last minute – not the right way to work!
The entire process of design, development, build, deployment, testing, and more took time, resources, and because of more manual processes, every stage was prone to errors.
How does DevOps help to solve this problem?
DevOps is a name given to the set of practices that combine development and IT (Information Technology) operations to shorten the software development lifecycle through continuous delivery and feedback. The practices also encourage better communication and coordination between different business units.
The main stages in DevOps are –
- Configuration management (Continuous Development)
- Continuous Integration
- Formulating Test strategy (Continuous testing)
- Deployment pipeline (Continuous monitoring)
- Build and deployment
- Automation (Containerization & Virtualization)
- Continuous delivery
What Constitutes Dev and Ops?
You might think Dev, as in development, refers to just the coders – but that’s not entirely true. Dev includes the entire team that helps in building the product, including the design, QA, and others. Same way Ops includes everyone from operations – system engineers, release engineers, system administrators, DBAs, network engineers, operations managers, and more.
It means that the entire lifecycle of a software or product is covered in the DevOps lifecycle.
What is agile?
Before we get into the details of DevOps, let us understand what is agile methodology. Many people compare and confuse agile and DevOps. While both are similar in some ways, both have different purposes.
The agile methodology involves delivering software in small, fast releases through an iterative approach. Agile doesn’t focus on automation. It is just an approach followed by the development team and customers to communicate and give regular work updates. In short, it is an effective way of collaboration between the customer and the development team, where the customer gives feedback. Learn more about Agile with this free tutorial.
DevOps, however, is more within the internal team – it is communication and collaboration between the development and the operations team. It also focuses on automation and uses many tools for feedback. With DevOps, there is continuous development, continuous testing (CT), continuous deployment (CD), continuous monitoring, and continuous integration (CI).
The continuous monitoring ensures high-quality, and the continuous delivery process ensures on-time delivery.
Suppose a version of the software is ready to be tested. After testing, there are some defects, and the developers need to work on some files to fix the issues. Developers fix the issues found by the testing team. However, the fix is not proper and leads to other issues. What should you do?
Configuration management tools let you do version control. The code rolls back immediately to the most stable previous version if an issue happens. It also ensures that there is a track of who has done what changes to the code. It helps developers segregate and work on independent issues and avoid overwriting each other’s changes.
So why not just do source code control?
That’s because version control also includes database scripts, build scripts, deployment scripts, project plans, libraries, configuration files, documents, and everything else related to a particular version of the software. It also ensures that when the system fails for some reason – be it code or database or configuration changes, we know precisely what to rollback and to which point.
Version control, done through ‘checking-in’ and ‘checking-out’ code where the former means committing the changes to the tool, and the latter means locking and modifying the file. Checking-in the code creates a version; hence, it is essential to test the code in a stable environment to make sure the changes are working.
There are many tools for version control like ClearCase, SVN, and more. Many complex projects create different branches of the same codebase and work on individual branches. Later on, all the branches are merged to form the final source code.
What happens when many changes are merged at once, and something fails? It takes a long time to figure out what went wrong and in which branch. That’s because the general trend is to commit changes only after all the modules are completed and unit tested. It can lead to all the problems pouring in at once during the integration stage.
With Continuous Integration, the smallest of changes over the stable codebase are immediately built and tested through a set of automated test cases. If something fails, developers have to stop further development and fix the issues first. It ensures that the software is in a stable and working state at all times.
Continuous integration is the essence of DevOps as it ensures that the code is built and tested continuously – whenever any changes are made.
The changes should be committed, and a version should be created to perform a smooth CI process. Further, build scripts should be automated and always updated to be readable with more additions as the project size increases. A comprehensive automated test suite should be prepared to ensure we know what has failed the build.
The CI server then performs the automated build and runs the automated tests.
Some of the helpful CI tools are Jenkins, Buddy, CircleCI, GitLabCI, and more.
How does the CI software know if any changes have happened?
Through version control, the CI tool polls the version control tool, and if any commits have occurred, it then triggers the build, runs the tests, and generates the results.
As you might have already understood, a comprehensive set of tests are created to be run for each build. As the project functionality grows, new test cases are created with each build. In totality, the old, as well as new test cases both, are run with each build. It ensures unit testing, acceptance testing, and regression testing – are all done automatically – for each build – and the feedback report is generated immediately. The only manual work left is the exploratory testing by the testers.
Sometimes, the requirement changes as the project advance. The code and tests are updated based on new requirements, but we seldom find time to update requirement documents. Through automated tests and test suites, requirement documentation can be generated automatically.
As easy as it sounds, it puts much responsibility on the automated test suites, which have to be good enough and ensure that the system won’t break if new functionalities are added and that all possible scenarios are covered.
Some testing tools commonly used are Junit and Selenium.
As we have seen earlier, CI is the essence of DevOps. However, for CI to work correctly, all stages of testing, development, feedback, operations, and release should be in total sync. Sometimes, the testers keep waiting for a stable or working build; sometimes developers get the feedback and issue report for a previous release after they have started work on the next release, sometimes operations teams keep waiting for proper documentation and fixes. It can lead to delays in getting the bug-free software into production.
What does the deployment pipeline do?
The deployment pipeline helps solve this issue. Through the deployment pipeline process, developers, testers, and operations teamwork in collaboration.
Once the delivery team checks-in a piece of code, a build is triggered, and automated unit tests are run on it. Once these tests pass, automated acceptance tests are run. After passing this step, user acceptance testing (UAT) is done, and the product goes for release to staging or production. At every step, feedback is given, and if there is any failure, that needs to be corrected immediately and checked-in leading to the same process being repeated.
Because of this continuous delivery of software versions and faster feedback at every stage, the number of issues eventually reduces, and the confidence of the team increases.
The deployment pipeline is also called a build pipeline or CI pipeline.
Build, deployment and automation
Build automation is a process where each of the stages of build – retrieval of software code from the repository, code compilation, converting the code into a binary artifact, and executing automated (functional) tests are all scripted in a single file. When the build script is executed, all of the above tasks are performed. This leads to faster delivery and better collaboration between different teams. It also ensures minimal rework and fewer defects in the build. Some popular build tools are Ant, Maven, and Make.
Deployment automation – So what happens after the code passes the unit testing stage? For CI, it is essential that the deployment process also happens automatically. It includes installing EAR files, configuring databases, configuring server settings to suit the production environment, deploying the application to production, and restarting the servers, if necessary. Some helpful deployment automation tools are Jenkins, Microsoft Visual Studio, AWS CodeDeploy, Puppet, Distelli, and more.
It is called continuous build and deployment, where every commit invokes the CI server to perform the entire automation cycle. Here is the entire continuous delivery pipeline –
Continuous delivery, hmm?
Did you notice the word ‘continuous delivery’ (CD) above? That is the entire DevOps process – continuous delivery of artifacts through automated builds, deployments, and tests leading to on-time delivery of efficient code with minimal defects.
Where is DevOps used?
In many industries like finance, banking, telecom, and more timelines are very critical, and any delay in deployment of applications or new versions can cost companies many customers. In such cases, through the DevOps process, it is faster and easier to deploy stable code in production. For example, an online retail website is still able to cater to customers, while new changes are being deployed to the server – reducing the downtime. Further, DevOps has given a brand-new approach to internally maintain projects and reduce testing, deployment, and integration time, reducing the overall time taken to implement new functionality.
Popularity of DevOps
DevOps had revolutionized the way projects are developed, especially from the way it used to be when the waterfall approach used to be followed. To recap, here are some of the benefits that the DevOps approach has given to the ‘dev’ and the ‘ops’ team.
|1||Long waiting time to deploy code||Quick deployment and testing of code, faster feedback|
|2||Late feedback and bug reporting, resulting in the development team doing both new and old work at the same time.||No waiting time to deploy code. Developers can fully focus on new work.|
|3||Increased application downtime, difficulty in maintaining uptime||Due to containerization through tools like Kubernetes and Docker, service uptime is greater|
|4||Feedback process is slow and difficult, collaboration between teams is difficult.||Continuous monitoring and deployment ensure on-time feedback|
|5||More number of servers to be maintained||Effective administration due to continuous delivery|
Of course, we are learning more about DevOps! Learning DevOps essentially means learning the tools that DevOps uses at each stage. There are plenty of tutorials available on the internet for the same. Here is an excellent tutorial on learning DevOps using Kubernetes container. You can also find a lot more DevOps tutorials and blogs on our website, hackr.io.
Also, read our blog on Top DevOps questions to crack the interview for your dream job.
People are also reading:
- What is DevOps?
- Best DevOps Certification
- Power of DevOps in the Read World
- How to become a DevOps Engineer?
- 10 Top DevOps Tools
- Top DevOps Interview Questions
- Top Linux Interview Questions
- Top Jenkins Interview Questions
- Difference between Kubernetes vs Docker
- Difference between Google Cloud vs AWS vs Azure