DevOps: defined
DevOps is an IT methodology and model that aims to increase an organisation’s capacity to provide solutions at pace. It is an overarching methodology that combines a set of operating philosophies, practices, and tools. Together, these intersecting aspects of DevOps work to improve the agility of development and delivery whilst also allowing for collaboration, continuous improvement, and the future evolution of solutions. Notably, DevOps was developed to outpace traditional software development methodologies and infrastructure management processes.
DevOps: introduction
A core innovation of DevOps can be identified in its moniker which combines ‘Dev’ and ‘Ops’. ‘Dev’ stands for development whilst ‘Ops’ signifies operations. The DevOps model was devised to automate and bring together development and IT operations teams. As a result, it avoids being a static and inefficiently siloed methodology by integrating these two into an adaptable approach. The development team and operations team, under DevOps, work in a more synthesized manner with a focus on continuous communication, collaboration, transparency, and visibility. This integration runs through the entire DevOps lifecycle and aims to maximise the benefits of continuous improvement, customer feedback, and adaptive testing.
The structure of a DevOps team or deployment is not overly determined. The operations and development teams may become one unified team, or they may retain some distinction based on the requirements of the project and/or customer. Typically, the entire solution lifecycle is not defined by hard boundaries and engineers can work and contribute to the project from start to end. Additionally, key personnel from other teams, e.g., security and quality control/assurance, may be integrated into a DevOps team. Alternatively, a DevOps approach may be used for the security team itself. This is known as DevSecOps.
All DevOps teams work to improve and innovate older methods of solution lifecycle management. This will translate into the automation of inefficient manual processes. In doing so DevOps teams improve agility and the pace of delivery. To achieve this DevOps implementation involves the use of a solution stack and tooling. The tooling/solution stack are the functional ways in which the overarching DevOps methodology and principles are enacted. Below, in more detail, you will find an overview of the key DevOps methods, practices and tools.
In short, DevOps should be understood as a customer focused model of working which aims to facilitate faster, reliable, and more agile delivery. It seeks to overcome old, siloed working practices by prioritising communication and collaboration, allowing solution providers to incorporate continuous improvement and customer feedback at any point of the solution lifecycle. When used, DevOps is powerful because it facilitates a greater alignment with customer/user needs whilst also driving up the quality and cost-efficiency of projects. Organisations, then, can use DevOps to drive customer satisfaction and, in turn, create growth which makes them more competitive.
DevOps: life cycle
The integrated and continuous nature of DevOps can be confusing to those who are unfamiliar. However, it is easily understood in a visual manner due to its continuous nature. The typical lifecycle phases in a DevOps deployment are:
- Planning
- Building
- CI/CD
- Monitoring & Testing
- Operating, and
- Continuous feedback
DevOps: methods
Agile:
Agile is an approach to project management that was first used in software development. It is an iterative approach which aims to increase the pace – or agility – of projects whilst also increasing quality and reliability. Pushing against traditional project management philosophies, it does not adopt a rigid linear or sequential approach. Instead, an Agile project involves continuous improvement, evaluation, and welcome reaction to changing requirements. DevOps, then, can be understood as an example, extension, or evolution of the more loosely defined Agile method.
Advantages of Agile approaches are that the speed to market is increased, and risk mitigation improved. This is because Agile developments segment product development into small increments. Each iteration requires a cross functional team that works on all aspects of development, e.g., planning, analysis, design, coding, and testing. The product is demonstrated to be working at the end of each iteration. Therefore, risk mitigation is improved, and the pace of development increased because the constant feedback loop translates into a more improved product.
Scrum:
Scrum is a lightweight framework that helps people, teams and organizations generate value through adaptive solutions for complex problems. It is iterative and incremental and can be used to develop and deliver solutions/products. Scrum challenges traditional project management which is defined by a more rigid and sequential approach.
Scrum allows teams to self-organise, encourages dynamic collaboration, and recognises that the scope of the project sometimes changes during delivery. Scrum’s effectiveness comes from how it allows teams to manage unpredictable challenges.
A feature that defined Scrum is the use of time-boxed iteration known as sprints. These are no longer than a month in duration and include short daily meetings called daily scrums. At the end of each sprint review meetings are held – a sprint review and sprint retrospective. This process continues until the project reaches completion.
DevOps: principles and practices
Key DevOps principles and best practices are outlined below. These should not be understood as isolated from one another, but, rather, as a set of overlapping and mutually beneficial practices that, together, realise the DevOps vision.
Continuous Development:
A development process that encompasses multiple DevOps processes, including continuous integration, continuous testing, continuous delivery, and continuous deployment. a practice which extends over planning and coding phases. This sometimes involves version-control mechanisms.
Continuous Integration:
This is a practice of automating the integration of code change during the lifecycle of a DevOps project. Typically, configuration management tools are used alongside test and development tools in order to track code development and its readiness for production. This involves simultaneous feedback between testing and development professionals, allowing the quick identification and resolution of code issues.
Continuous Delivery:
An approach that uses automation to improve the pace of code deployment and subsequent changes to code in the testing/production environment. It is thought of as an extension of continuous integration, and they can be collectively known as CI/CD.
Continuous Deployment:
An approach which is similar to continuous delivery. It is the practice of automating the release of new or changed code into production. Unlike continuous delivery, it passes the verification steps at each stage in the pipeline and is released directly to production. Continuous deployment often involves container technology such as Docker and Kubernetes. Importantly, this technology allows engineers to maintain the consistency of code across different deployments platforms and environments.
Continuous Testing:
A practice which is incorporated as part of the above. It is the use of automated, prescheduled code tests which are continued throughout code development/deployment. This improves the quality and pace of code to production.
Microservices:
Microservices architecture is a design approach where an application is built as a set of smaller services. These services can be deployed/operated independently, each service runs its own process and communicates with other services via a well-defined interface. Typically, microservices are built with a single purpose as defined by business capabilities. They are versatile because they can be built using different frameworks and/or programming languages. Microservices are useful for DevOps projects because of their nature and features which facilitate CI/CD.
Infrastructure as Code:
Infrastructure as code (IaC) is an approach to provisioning and managing infrastructure using code instead of through manual processes. IaC approaches configuration management by codifying all infrastructure resources into text files. These files are then committed to a version control system, e.g., GIT. Crucially, IaC is a cornerstone of DevOps practice because it incorporates automation, facilitates pull request workflows, and makes processes like CI/CD manageable.
Notably, IaC is used to manage cloud infrastructure such as virtual machines, networks, applications, platforms, load balancers, etc. In turn, IaC is made possible by cloud infrastructure, especially IaaS platforms. The cloud, being API driven, enables engineers to interact with the infrastructure in a programmatic manner, at scale. It removes the need to manually set up and configure resources. Therefore, because they are defined by code, infrastructure can be quickly deployed, updated with patches and versions, and duplicated in a repeated way.
Monitoring, Alerts, and Logging:
This is the practice of continuously monitoring code throughout the lifecycle of the project. Monitoring typically encompasses both code in operation and underlying support infrastructure. Capturing, categorising, and analysing data/logs ensure continuous improvement is fully realised. It allows the creation of alerts and a continuous feedback loop which then reports on bugs/issues.
DevOps: Tools
DevOps practitioners make use of a range of tools, which form a DevOps toolchain. Below is an outline of several tools commonly used in a DevOps deployment.
Code Repo Tools
In DevOps a wide range of coding tools are used to design the solution and then create the necessary code. Tools include GitHub, GitLab, and Bitbucket.
Building Tools
Automated tools support the build and versions of development. They may help compile/package code for future release. Source code repositories and package repositories are also needed to package infrastructure for product release. Tools include Docker, Puppet, Ansible, and Maven.
Testing Tools
Continuous questions require a suite of testing tools to maintain quality. Tools include JUnit, Codeception, Slenium, TestNG, and BlazeMeter.
Monitoring Tools
To facilitate continuous monitoring tools that can identify, log, and collect data are needed. Tools include New Relic, Datadog, Grafana, Wireshark, Splunk, Nagios, and Slack.
Deployment Tools
These tools help manage, schedule, and automate product releases. Tools include Puppet, Chef, OpenStack, Docker, Jenkins Gitlab, and GitHUb.