DevOps is a set of practices that emphasizes the communication and collaboration of software Developers, Testers, Operations professionals and other stakeholders while automating the process of software delivery and infrastructure changes. It aims at establishing a culture and environment where building, testing, and releasing software can happen quickly, frequently, and more reliably.
Because DevOps is a cultural shift and collaboration between development, operations and testing, there is no single DevOps tool, rather a set or “DevOps toolchain” consisting of multiple tools. Generally, DevOps tools fit into one or more of these categories, which is reflective of the software development and delivery process.
Code – Code development and review, Version control tools, code merging
Build – Continuous integration tools, build status
Test – Test and results determine performance
Package – Artifact repository, application pre-deployment staging
Release – Change management, release approvals, release automation
Configure – Infrastructure configuration and management, Infrastructure as Code tools
Monitor – Applications performance monitoring, end user experience
Though there are many tools available, certain categories of them are essential in the DevOps tool chain setup for use in an organization.
Tools such as Docker (containerization), Jenkins (Continuous Integration), Chef (Infrastructure as Code) and Vagrant (Virtualization Platform) among many others are often used and discussed.
In DevOps, Continuous Integration (CI), Continuous Delivery (CD) and Continuous Testing (CT) are 3 key aspects which are briefed below.
Continuous Integration (CI): Is a software development practice where developers regularly merge their code changes into a central repository, after which automated builds and tests are run. The key goals of continuous integration are to find and address bugs quicker, improve software quality, and reduce the time it takes to validate and release new software updates.
Continuous Delivery (CD): Is a software development practice where code changes are automatically built, tested, and prepared for a release to production. It expands upon continuous integration by deploying all code changes to a testing environment and/or a production environment after the build stage. When continuous delivery is implemented properly, developers will always have a Deployment-ready build artifact that has passed through a standardized test process.
Continuous Testing (CT): Is the process of executing automated tests as part of the software delivery pipeline to obtain immediate feedback on the business risks associated with a software release candidate.
What is the difference between Continuous Delivery and Continuous Deployment:
Continuous Delivery (CD): Automates the entire software release process. Every revision that is committed, triggers an automated flow that builds, tests, and then stages the update. The final decision to deploy to a live production environment is triggered by a developer/release manager.
Continuous Deployment: Is a step further to CD, with Continuous Deployment, revisions are deployed to a production environment automatically without explicit approval from a developer, making the entire software release process automated.
Advantages of DevOps:
- Quick to Market.
- Reliability in Delivery (no human errors)
- Scale at ease (via configuration management tools).
- Improved Collaboration (between dev & ops reduces risk by sharing work).