Automation in DevOps:
In the last tutorial we learned the importance of Source control in DevOps. Here, in this tutorial we will learn about Automation in DevOps.
Automation is the ultimate need for DevOps practice and ‘Automate everything’ is the key principle of DevOps. In DevOps, automation kick starts from the code generation on Developers machine till the code is pushed to the code and even after that to monitor the application and system in production.
Suggested Reading => Informative DevOps Tutorial Series
Entire DevOps pipeline containing continuous integration, continuous testing, and continuous deployment, including application performance monitoring in live is automated.
Automating infrastructure set up and configurations and the software deployment is the key highlight of DevOps practice. DevOps practice is heavily dependent on Automation in order to make deliveries over a period of few hours, and make frequent deliveries across platforms.
Thus, automation in DevOps fosters speed, greater accuracy, consistency, reliability and increases the number of deliveries. Ultimately, automation in DevOps encapsulates everything right from building, deploying and monitoring.
VIDEO Part 2 Block 3: DevOps Automation – 16 minutes 40 seconds
Let us understand the significance of Automation in DevOps practice in detail in this tutorial.
Here, we will discuss:
- How Is Automation applied in DevOps practice?
- Need and role of Automation?
- What to Automate?
- Tools and framework, continuous testing?
I’m bit afraid to talk about automation. Because, how much ever I talk about automation, according to me, it is never complete at all.
Needless to say, automation is simply getting away from the manual tasks. People want to reduce their involvement in the mundane routine tasks and utilize their time and intelligence in something new or innovative.
Having said that, the role of automation in DevOps is very important and very crucial in delivering value to the customer continuously.
Let us answer together, how automation is applied in DevOps practice along with what to automate because both of these questions get answered together.
What to Automate?
I don’t think much explanation is required for the answer to this question in this automation era. Anywhere we go, we see things that are being automated, either with minimal or no human intervention at all. So, DevOps is not an exception to this.
In a traditional software development method, it was just the development team and their activities that used to get automated, specifically testing. It used to be so, that automation means testing and automating test cases, that too only functional test cases but not even non-functional testing like performance and security.
And none of the other activities especially ops activities used to get automated. Failure of manual deployment on a huge cluster which involved 8 servers and the loss it caused is a very good Example of complexity involved in deployments and it clearly explains the need of automation for Devops activities.
I’ve seen myself, that organizations hiring highly skilled and intelligent people by paying a huge salary package, for configuring the networks and environments, which used to do based on their intelligence, knowledge in the respective area, their experience and expertise, which was a complete manual work.
Manual configuration is always error-prone as everyone knows. What generally used to happen in case of manual set up is that, over a period of time, after repeatedly doing the same work again and again, these smart people, network configurators use to get bored of these activities and end up in committing mistakes due to negligence.
You know that they are very brilliant and these activities will be very simple and uninteresting to them and they need new challenges every day, and not this boring task.
So, the introduction of automation for software installation and version controlling the infrastructure part became a huge gain and reduced lot of human errors in addition to saving time and allows any common man do this, thereby removing the dependency on the skilled workers.
Also, running around processes if a new environment to be set up, like raising the ticket for setting up a new environment, IT team working from behind in setting it up, all these hassles are removed.
Thus, individual team members are empowered to carry out the tasks. Imagine the speed, reliability and the consistency being achieved by the automation. So, automation has increased terribly, the number of deliveries to the production.
So now in DevOps practice, Operations team also have started automation in all their works, which has become the key to the success of DevOps.
Actually, in DevOps practice, automation kick starts from the code generation on developers machine until the code is out to the production and even after that in monitoring the application in the live. This is a typical DevOps cycle.
Development and Ops team checks in the code and the environment configurations to the source control, from where the automation kicks in for triggering the build, running unit test cases and other basic code quality, coverage test cases, security-related test cases etc.
Once the code is through with this, the code gets automatically compiled, gets stored in the version control and gets automatically deployed on to the further environments for further testing and ultimately to the production release.
We can see the automation being carried out at every phase of the development starting from triggering of the build, carrying out unit testing, packaging, deploying on to the specified environments, carrying out build verification tests, smoke tests, acceptance test cases and finally deploying on to the final production environment.
Even when we say automating test cases, it is not just the unit tests but installation tests, integration tests, user experience tests, UI tests etc.
DevOps forces the operations team, in addition to development activities, to automate all their activities, like provisioning the servers, configuring the servers, configuring the networks, configuring firewalls, monitoring the application in the production system.
Hence to answer what to automate, it is build trigger, compiling and building, deploying or installing, automating infrastructure set up as a coded script, environment configurations as a coded script, needless to mention testing, post-deployment life performance monitoring in life, logs monitoring, monitoring alerts, pushing notifications to live and getting alerts from live in case of any errors and warnings etc.,
Ultimately automating all the project related documents.
So, I can say automation in DevOps language means, Continuous Integration, Continuous Testing, Continuous Deployment and Continuous Delivery. We will study each of them in detail in the coming parts.
Overall, DevOps enables every activity of development and operations, wherever possible, whichever is automatable, whichever is repeatable, wherever accuracy is demanded, whichever takes a long time is automated.
Nevertheless, if we don’t mention the tools to be used for automation, the discussion on automation is incomplete.
So, Selection of a right framework and automation tool is the key requirement for automation in DevOps.
There are a lot of tools available in the market, both open source and licensed tools, which supports the end to end automation of the entire delivery pipeline, including activities performed by Ops team, provisioning machines, spinning automated servers, configuring networks, firewalls, and even monitoring the performance of the software.
Also, certain organizations have developed their own framework so as to integrate the end to end process of DevOps which starts from code commit to code deployment including documentation which is a single integrated tool and team don’t have to go outside the framework for anything related to program, be it version control, test case writing, review, test case results dumping, analysis etc.,
E.g: puppet, Azure resource manager, chef etc.,
Benefits of Automation in DevOps
We have seen earlier releases, in the absence of automation taking years to get into the production and also recently with agile, be it lean, scrum or safe, and with a percentage of automation being improved, release timelines are brought down to few months or weeks.
But automation is absolutely a must in order to make the releases as fast as possible in a few hours. So, I think it is impossible to make such quick and frequent releases unless we put in automation in place throughout the pipeline.
So, quite obviously then, if we want to achieve the objectives of DevOps, high quality and value delivered to customers via frequent and fast deliveries, Automate everything is a must.
Clearly, we know by now that automation removes manual errors, dependency on an individual, performs faster, and achieves accuracy thereby achieving consistency and reliability. Hence, automating everything enables the devops objective of high-quality delivery, enables frequent releases and faster releases.
In a nutshell, Automation,
- Removes manual errors
- Team members are empowered
- Dependency removed
- Latency removed
- Increases no of deliveries
- Reduces the lead time
- Increases frequency of releases
- Provides faster feedback
- Enables speed, reliability, and consistency
So, in short, Automation in DevOps ultimately encapsulates everything right from building, deploying and monitoring.