What is DevOps?
DevOps is a mode of working combining software [dev]elopment with IT [op]erations. Dev and Ops teams tended to work separately - dev focusing on rapid development and deployment, and ops focusing on stability and reliability of service. DevOps utilises automation and tools to quickly build, test, deploy, re-test, and propagate software changes through development environments to eventually deploy into production.
Amazon CTO Werner Vogels said that when developers take on more responsibility for operations, the technology and the service to customers improves:
The traditional model is that you take your software to the wall that separates development and operations, and throw it over and forget about it. Not at Amazon. You build it, you run it. This brings developers into contact with the day-to-day operation of their software. It also brings them into day-to-day contact with the customer. [The resulting customer feedback loop] … is essential for improving the quality of the service.
The benefits of DevOps are:
- speed of development
- rapid delivery
- improved collaboration
The following best practices underpin DevOps:
- continous integration
- continous delivery
- infrastructure as code
- monitoring and logging
- communication and collaboration
What is a DevOps toolchain?
The tools that support the cross-functional DevOps mode of working are referred to as DevOps toolchains. Tools support key aspects of the product development and delivery process, and are generally grouped under categories represented by:
By Kharnagy [CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0)], from Wikimedia Commons
There are different interpretations of the DevOps toolchain but some categories are more essential than others, such as continuous integration and infrastructure as code. The key is to automate common repetitive processes so that teams can focus on more creative higher level work.
Defining and planning teams comprise software engineers, process owners, security personnel, and key activities include defining metrics for production, business, and update release, creating a release plan and setting the security policy. Some tools available to support this stage are Altassian and iRise.
Gartner defines it thus: “Verify includes all the activities required to ensure the quality of the release. These activities can occur simultaneously with creation activities. It is important to describe specific activities designed to deliver high-quality code prior to deploying the release into production. This will include tests for both functional and nonfunctional (performance, security, usability, system environment configuration and compliance) validation. Create and verify are generally connected together via continuous integration facilities and the use of automated tools to evaluate the created components.”
Verify is supported by a number of tools providing test automation, test lab, static analysis and security.
Packaging refers to the process of getting the release ready for deployment using universal package management tools
Release involves a number of activities around the deployment of software into a production environment. This may include planning, scheduling and orchestration ,and recovery and fallback.
A number of operations activities support the deployment of an application and may involve network provision,in infrastructure and storage configuration, database provisioning - using configuration management tools and infrastructure as code.
Monitoring is the collecting, storage and analysis of metric data relating to all part of a system, so that problems and bottlenecks can be managed quickly and efficiently.
There is a view that DevOps is an approach to collaboration by the people involved in the development and operations processes. While this is true, it is underpinned by a suite of tools that increase the productivity, reliability and security of the product development process.
Configuration management tools automate the application of configuration states.
Continuous monitoring is the process where the configuration of the monitoring software changes in response to changes in the infrastructure.
Containers are used to get software to run reliably in different environments. A container consists of an entire runtime environment, libraries, dependencies and configuration in a single package. Containerisation solves the problem of running systems of different OS distributions and underlying infrastructure.
Build automation is a key stage in continuous delivery model. Build automation tools support the processes around build scripts in a shared environment. Typically code is contributed by a number of developers and checks are required to ensure that new code does not cause problems or conflicts with existing code or new code from other developers. Build automation is usually accomplished using a scripting language which provides the link to other processes within the compilation process. The scripting will control documenting, testing, compiling and distributing the code.
There are a number of types of test automation: unit tests, functional tests and integration tests. Other areas that benefit from automated testing are performance, load, security, accessibility and production monitoring.
Application-release automation (ARA) refers to the process of packaging and deploying an application or update of an application from development, across various environments, and ultimately to production. (wikipedia)
Monitoring systems provide insights about the health and performance of a system so that operators can take action when required. Monitoring and metrics span several areas:
- operational efficiency
- service quality
- service velocity
- organisational effectiveness
- customer value
- business performance
Monitoring and alerting systems should share some of the following characteristics:
- independence from the other infrastructure
- be reliable and trustworthy
- possess easy to read summary and detail views of the data
- maintain historical data that is easily accessible and readable
- facilitate the correlation of data from different systems
- be easy to configure to measure new metrics
- possess a flexible alerting system that allows the fine tuning of alert parameters