This seventh instalment of the series on network function virtualization explores the transformative potential of DevOps methodology. Integrating DevOps enables faster SDLC by breaking down silos and fostering a culture of collaboration.
DevOps is seen as a blend of developers (mainly software developers, including programmers, build engineers, testers, and quality engineers) with operators (mainly handling databases, production environment, system administration, and networking). In the book by Ingo M. Weber, Len Bass, and Liming Zhu, ‘DevOps: A Software Architect’s Perspective’, DevOps is defined as: “DevOps is a set of practices intended to reduce the time between committing a change to a system and the change being placed into normal production while ensuring high quality.”
The main focus of DevOps is integrating a complete software development life cycle (SDLC) with the help of automation tools and collaboration between the Dev and Ops teams, enabling them to work collaboratively as a single team and deliver quality software with speed. Adapting the DevOps model of software production helps to push incremental changes and new features to the production servers much faster than traditional methodologies.
Using the right DevOps tools at the right place can help you achieve:
- Accelerated product development
- Faster and more frequent deployments
- Quick incremental releases
- Easy automation
- Seamless collaboration
- Fault tolerance
- Easy monitoring
- Quality assurance
- Fast reaction to feedback
So what is DevOps methodology?
The DevOps methodology can be summed up as narrowing down the gap between the development and operations teams. These teams now come together to produce the deliverables as a single team. The integration of DevOps ensures quick and stable deliverables that align with the organisation’s ideology.
Most of these aspects can be achieved through automation of the development cycle. There are many tools commonly used to achieve automation that specifically put emphasis on continuous integration, continuous delivery, or continuous deployment. Incident monitoring can be done in real-time enabling quick rollback methods. Reliability and traffic handling can be achieved through the implementation of cloud computing and microservices. All these establish the fact that DevOps can deliver what it promises.
Phases and toolchains
Quality deliveries with short cycle times require a high degree of automation. Automation is necessary to achieve DevOps as it leads to higher deliverables and optimises the deployed application services. The DevOps life cycle is achieved through the continuous completion of various phases:
- Continuous development
- Continuous integration
- Continuous testing
- Continuous deployment
- Continuous feedback
- Continuous monitoring
- Continuous operations
Everything is continuous in DevOps, and many of these phases interact with one another and work in a pipeline to assemble an application to achieve the organisation’s goals. These phases are fulfilled with various toolchains of selection; some of the common tools are mentioned in Table 1
Tool | DevOps phase | Tool type | Configuration format |
GitHub | Continuous development | Source code management | UI |
GitLab | Continuous development | Source code management | UI |
Gradle | Continuous development | Build | Groovy |
Maven | Continuous development | Build | XML |
Jira | Continuous development | Project management | UI |
Kanban | Continuous development | Project management | UI |
Jenkins | Continuous integration | Build, testing, delivery | UI |
Bamboo | Continuous integration | Build | UI |
JUnit | Continuous testing | Unit testing | Java |
Selenium | Continuous testing | Web testing | Python, Java |
Puppet | Continuous deployment | Configuration management | Domain specific language |
Ansible | Continuous deployment | Configuration management | YAML |
Docker | Continuous deployment | Containerization | YAML |
Chef | Continuous deployment | Configuration management | Ruby-domain specific language |
ELK Stack | Continuous monitoring | Monitoring | Domain specific language |
Nagios | Continuous monitoring | Network monitoring | – |
Slack | Continuous feedback | Collaborative software | UI |
Kubernetes | Continuous operations | Orchestration | YAML |
OpenStack | Continuous operations | IaaS | UI |
Table 1: Automation tools of DevOps
Continuous development
The first step in the DevOps pipeline is to store the development code on a version control system (VCS) where the development team can collaborate on the code and manage different versions of the development. Team members may have their own set of source codes in a project depending on the module they are working on. To handle these versions and integrate them into one project, a source code manager is required.
Git, an open source version control software, efficiently manages various versions of the source code and coordinates changes in the files made by collaborating developers. It speeds up data integrity and code collaboration within the team. The workflow of GitHub is showcased in Figure 1.
There are several source code holding facilities that utilise the Git version control system including Bitbucket, GitHub, GitLab, SourceForge, and more. For source control management (SCM) purposes, we use GitHub.
Continuous integration
Continuous integration is a phase in SDLC where developers’ code is integrated to create an artefact. Each integration of code undergoes the building process, automated integration testing, and quality assurance. Once the code is successfully built, the artefact can be deployed to remote systems using the automated deployment tools integrated with the continuous integration tools.
Jenkins is one such open source DevOps tool used for continuous integration. It automates various parts of the SDLC, including fetching the developer’s code from GitHub, testing that code, building the code in an artefact, and further calling automation deployment tools. Jenkins can integrate most of the tools while facilitating continuous testing, building, and integration. The workflow of Jenkins is depicted in Figure 2.
Continuous testing
Testing plays a crucial role in the entire SDLC to ensure what is built meets the real world requirements. Testing helps reduce the risk of failures in production and provides immediate feedback during assessment. It involves validating APIs, testing for security vulnerabilities, and assessing the performance of the application under stress.
Continuous deployment
Continuous deployment involves deploying code to remote servers without complications. Traditionally, deployment can be a complex and time-consuming task; it must be reliable in order to avoid project service failures or server downtime. To achieve seamless continuous delivery and immediate autonomous deployment to the production environment, we can utilise Ansible, a powerful DevOps tool.
Ansible is open source software that provides configuration management, software provisioning, and deployment capabilities. With Ansible, code deployment, configuration and maintenance become easier tasks. The workflow of Ansible is illustrated in Figure 3.
Continuous feedback
Continuous feedback involves capturing the user experiences and insights of the application to strategise future actions and improvements. It’s the continuous interaction of application users with the project business team. Feedback can be structured or unstructured. The structured feedback can be seen as application reviews over various platforms or surveys. Unstructured feedback is seen through users’ feedback over various social media channels. Gathering the feedback connects users with the team. It helps them enhance and address the user experience in subsequent releases.
Continuous monitoring
Continuous monitoring is crucial for assessing compliance issues and security threats in the application. It involves continuous monitoring of storage, networks, or server notifications. This early analysis helps the DevOps team detect and divert threats and take appropriate measures to reduce the downtime of the application. The entire process is automated in the DevOps pipeline, and monitoring is done using various tools to ensure high reliability and stability of the complete setup.
Continuous operations
After the successful configuration of the production environment and deployment of the application, the main challenge is to keep the application running without any hiccups ‘Continuous operations’ focuses on maintaining a smoothly running application — there should be minimal to no downtime. Maintenance is a major part of continuous operations, ensuring that the recent releases, patches, and updates do not impact the current deployment in any way.
The team motive is delivered through this phase because it automatically handles the network, database, and application configurations needed in the production environment. This leads to synchronised deployment and constant feedback. It enables scaling up and down based on requirements as well as rollover to the previous state if something undesirable happens.
Kubernetes enables continuous operations. It offers features like rollback, rollout, self-healing, and node monitoring, effectively delivering a robust environment with minimum downtime.
Additionally, OpenStack is used for infrastructure deployment, providing a platform for Kubernetes as shown in Figure 4. OpenStack serves the purpose of IaaS where the organisation’s data is confidentially stored in the in-house cloud environment enabling flexibility over the computation needs.
Adopting DevOps enables organisations to deliver their products at a faster pace. It promotes automation and the cultural changes that foster collaboration among multidisciplinary teams, ensuring accountability for the product. DevOps equips teams with in-house capabilities to address challenges and bail out teams in case of issues. The integration, deployments, and operations of the products can be easily done without any help from external teams. By following the phases of DevOps outlined above, organisations can achieve rapid and quality deployments with higher security and minimal or zero downtime.