DevOps is a culture that is supported by a set of practices and tools that assists the collaboration of Development and Operations teams.
DevOps aims to resolve the issues in the development process that arise due to the conflicting goals and isolation of traditional development and operations teams.
The integration of Development and Operations teams results in the following benefits:
The central pillars of a DevOps culture include:
DevOps teams seek to reduce the impact of system bottlenecks. Bottlenecks are the slowest part of the production process and they limit the overall pace of production.
Companies with separated development and operations teams can have some issues:
DevOps seeks to have each member of the team consider the entire development process. All members share responsibility for the final result.
Feedback loops use metrics to gain insights into application performance. Action can then be taken from these insights to continuously improve processes. Metrics that measure customer value should be prioritized.
In DevOps, failure is seen as something to learn from and is a normal part of the improvement process. It can lead to valuable insights being discovered.
One method DevOps teams use to normalize failure is through blameless retrospectives (or post-mortems).
Deployment is the general process of making a piece of software available to its users. It encompasses a number of important tools and processes including:
A version control system helps keep a project’s files clean, organized, and maintainable by tracking and maintaining different versions of a file or project.
Important features of version control systems include:
Different types of tests exist that are used in the various stages of deployment. Four types of tests that are often used are:
In version control, branching is the process of creating a copy of the source code (the “trunk”).
Developers can work on their own branches without changing the source code that real users and other developers depend on.
In version control, merging is the process of combining the changes in one branch with another.
This occurs when the differences between the two branches are ready to be reconciled.
Infrastructure is the set of hardware and software components that are used to develop, test, deploy and host web services.
Examples of these components include servers, switches, routers, and operating systems.
Operations teams are traditionally responsible for managing an application’s infrastructure.
Services provided by the Operations team include infrastructure configuration, device management, incidence and security response, and ongoing maintenance.
An environment, in the context of creating and deploying software, is the subset of infrastructure resources used to execute a program under specific constraints. Common examples include:
The local development environment is a developer’s computer where they create features of an application.
The integration environment is where developers attempt to merge features into a unified codebase, often using version-control software like Git.
The quality assurance (QA) / testing environment is where tests are executed to ensure the functionality and usability of a project.
The staging environment mimics the final production environment.
Final performance tests can be executed before real users are involved.
The production environment refers to the infrastructure resources that support the application accessed by clients.
This infrastructure consisted of hardware and software components including databases, servers, APIs, and external services scaled for real-world usage.