This article explains what DevOps is and what DevOps really means, and how automation tools can help teams adopt DevOps practice.
DevOps (a portmanteau of “development” and “operations”) is a concept dealing with, among other things: software development, operations, and services. It emphasizes communication, collaboration, and integration between software developers and information technology (IT) operations personnel.– Wikipedia
To understand what DevOps is, first, you need to understand the traditional development and deployment process.
Traditional Development & Deployment Process
Let’s understand how the traditional development and operations teams work to deploy the application to production.
- The development team develops code for the application, security, and bug fixes.
- Once the developed code is ready for release, it will be handed over to the operations team for deployment.
- The development team has to wait for days to weeks for the new code to be deployed in the production environment due to several challenges in environment provisioning and approvals.
- The operations team will start deploying the code to QA/Performance environments.
- The application might not work the way it worked in the development environment. It happens when the development environment is not identical to the deployment (QA/Perf/Stage/Prod) environment. It could be platform version issues, config changes, module version changes, etc.
- Ops team might think the problems are caused because of the bugs in the code.
- The development team might think there is some issue with the configurations made by the operations team.
- There should be something to make the development and operations team work better. Here is where DevOps comes into play
What is DevOps?
DevOps is a culture or a philosophy aiming to bridge the gap between the development and operations teams to improve productivity and collaboration by automating infrastructure, code deployments, and continuous monitoring of applications.
Overall it is building a good relationship and setting up a collaboration process between the development and operations teams to work together and share responsibilities.
One example of collaboration is the ops team attending development scrum meetings to understand application requirements during the development phase itself. Then the ops team will align with the development team’s delivery goals. So basically, they will act as a single team rather than different teams.
A team following DevOps principles automates everything from infrastructure provisioning to code testing and deployments.
This collaborative mindset avoids writing big chunks of code that take days and months of testing. Instead, developers will focus on small modules integrated and tested frequently to speed up the application delivery process.
Moreover, with the right automation, the development and production environments will have the same configuration’s so that the application will run on a production server as it did in the development environment.
Regarding automation, teams will write configuration management scripts or codes to bring the deployment infrastructure to the desired state.
Also, DevOps has been an exploding topic for the last five years. Here is the google trends data on DevOps for past years.
How can a team accomplish DevOps practice?
Using the right tools from development to the production environment would create a complete DevOps toolchain for delivering applications faster and better. Tools are just DevOps enablers. You have to understand that Automation is not DevOps.
An example of this is Jenkins. Using Jenkins, you can get the latest code from the version control systems like Github and test it continuously without any manual intervention. We call this Continuous Integration.
Next comes application deployment, for which configuration management tools like Puppet, Chef, Ansible and Saltstack can be used. Using these tools, you can code your infrastructure and define how your infrastructure should look and behave. This approach is often called “Infrastructure as code.”
The code determines the state of your infrastructure. These tools help the teams provision hundreds and thousands of servers, configure themselves automatically, and deploy the application code.
The next shift in the DevOps movement is containerization. Container technologies like Kubernetes help DevOps teams build applications and ship them to any environment without much configuration drift.
Adopting DevOps will vary between organizations. Some organizations change the culture and process of different teams to adopt DevOps. Some organizations will start building different skillsets in the same team to adopt DevOps. So it’s all about a collaborative mindset.
Please tell us what you think about the DevOps approach in the comment section.
Also, I have published an article on how to become a DevOps engineer. Check it out to understand the skillsets and learning paths required for practicing DevOps.