Implementing DevOps practices is an effective strategy for companies to boost business activities. To a great extent, this is achieved due to accelerated delivery of new features to customers, and speeding up customers’ feedback. And the driving force behind those changes is automation.
Lying in the core of DevOps methodology, it aims to minimize human intervention into system operation by automating repetitive actions and routine tasks. This helps to avoid human mistake factor and frees up time for engineers to address more sophisticated tasks. In general, automation in DevOps could be divided into four main blocks:
- managing physical and virtual servers and their configuration
- managing cloud services
- automating the process of delivering releases to development environment, and from development to production
- monitoring infrastructure health and application behavior.
Automated servers management
The grounds for the future process automation are laid at the very stage of project initiation. Based on business requirements, a solution architect plans the application infrastructure and estimates a pool of resources needed for its consistent performance without downtime. Opting for cloud platforms not only allows for automated resource provisioning, but also offers a variety of cloud-maintained tooling. That is to say, most of the services available in the cloud are either automated or can be easily configured so, including software updates, database replication, setup of network firewalls, traffic encryption, monitoring and logging, backups, etc. This provisioning could be also automated by means of IaC, or Infrastructure as code.
The IaC approach lies in creating and managing project infrastructure in code, instead of setting up each server manually. The code enables engineers to automate the setup of operation system and a host as well as other operational tasks, such as installing and configuring software, managing cloud services, etc. With IaC scripts for servers setup are stored in version control system, as well as the programming code. A cloud API enables engineers to interact with infrastructure at the software level in the same way as they do with application code. As the infrastructure and servers are defined in code, they can be rapidly deployed using predefined templates, easily updated and automatically reproduced many times.
IaC facilitates configuration management in terms that all changes that have been made to the current state of your servers become traceable and easily identified. Incorporating configuration management tools such as Terraform, Ansible, Chef or Puppet also helps to store the current state of your servers.
At the development stage one of the main DevOps practices involves building CI/CD pipelines to help developers integrate changes into product faster, oftener and in small batches. The continuous methodologies of software development involve automating the execution of scripts that activate build, test and deploy each time a new code has been pushed to a repository. To put it simple, every change submitted to an application is being built and tested automatically (Continuous Integration). Then the checked code is deployed to operating environments manually (Continuous Delivery) or automatically (Continuous Deployment).
With CI/CD chances of introducing errors to application code are minimized because automated testing acts like Quality Gates that won’t let an erroneous code pass from one stage of its lifecycle to the next. Thereby, for successful implementation of CI/CD practices it is recommended that autotests cover no less than 80% of existing codebase.
The toolset to build, test and deploy application software includes Jenkins, CircleCI, TeamCity, GitLab CI/CD, Bitbucket and other instruments.
When it comes to monitoring, automation can ease a cumbersome task of constant keeping track of application behavior by means of flexible setup of monitoring tools. In particular, by using event handlers, we can specify what a monitoring solution should do once a certain event occurs. For example, sending notifications via selected channels to automatically alert someone. Or automatically create tickets having integrated with a service desk, as some higher-end monitoring tools can do. In proactive monitoring, the tools are configured to address the issue, for example restart a service via scripts, and then report the results to a stand-by engineer.
Overall, the more advanced a monitoring solution is, the more options for automation it provides, thus saving time of engineers and keeping their attention focused on primary tasks.
Further on, automated DevOps practices are applied to collect monitoring and log metrics, check security vulnerabilities, etc.
Automation is a foundation stone of DevOps methodology. Applied throughout all stages of product lifecycle, automated DevOps practices relieve human labour, reduce the chances of errors in application code, and accelerate delivery process, making it easier for companies to comply with business requirements and keep ahead of competitors.