Introduction to Dev + Ops

5 minute read

The word “DevOps” is a common buzzword which is familiar and of course it does mean different things to many people. Hence in this post, I will be sharing the fundamental concepts of DevOps together with some common tools that companies are using and a simple setup.

DevOps

What is DevOps

DevOps comes from the two words “development” and “operations”, and it is all about combining the power of developers and operations.

Definition of DevOps

“DevOps is a set of practices that combines software development (Dev) and IT operations (Ops). It aims to shorten the systems development life cycle and provide continuous delivery with high software quality” - Wikipedia

DevOps is a process framework which fosters agility in software development, and collaboration between development and operations team to deploy applications faster in a repeatable and automated manner. With DevOps, businesses can expect faster time to market, increased productivity and revenue, business agility and many more. Also, DevOps comprises a set of principles for software delivery and is a cultural change which involves collaboration of cross-functional teams which includes development, operations, security, test and business.

Challenges faced before DevOps

Below are some of the typical challenges faced by the development and operations team before DevOps process framework is in placed:

  • How to manage the demand for resources when it comes to scaling
  • How to handle tweaks in an application in a production environment
  • Long release cycle requires more time to troubleshoot and resolve issues that occur during deployment in production environment

The misalignment and lack of collaboration between the two departments are often the culprit for the challenges. For instance when it comes to scaling, how can the application be deployed when lots of time is needed to prepare the infrastructure? And when it comes to addressing deployment error, how to ensure that there is zero to minimum downtime, and the rolling back to the previous version can be done immediately?

How DevOps addresses these challenges

DevOps follows a modular approach towards software development with a clear plan on how to break down existing monolithic applications into microservices. Instead of having big releases of application features, DevOps allows the roll out of bite-size features to their customers through a series of release iterations.

DevOps life cycle

DevOps adopts a few practices in its life cycle (simplified):

  • Continuous planning - identifying resources and priorities
  • Collaborative development - frequent code integrations and automatic build
  • Continuous testing - test application, find defects, rebuild if necessary
  • Continuous release and deployment - application goes Live if it passes the testing phase
  • Continuous monitoring - monitor performance as per requirements, early feedback helps to steer projects in the right direction
  • Continuous feedback and optimization - provide visibility on root cause which impacts business

CI/CD pipeline

CICD Image Source

Definition of continuous integration (CI)

“Continuous integration (CI) is the practice of merging all developers’ working copies to a shared mainline several times a day” - Wikipedia

Definition of continuous delivery (CD)

“Continuous delivery (CD) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be reliably released at any time and, when releasing the software, doing so manually” - Wikipedia

Definition of continuous deployment (CI)

“Continuous deployment (CD) is a software engineering approach in which software functionalities are delivered frequently through automated deployments” - Wikipedia

To implement DevOps process framework, a CI/CD pipeline needs to be created in an automated and repeatable way:

Pipeline

A CI/CD pipeline serves as the backbone of the DevOps process framework. It comprises a set of tools from conceptualize to delivery of applications from the planning to production phase. As mentioned above, DevOps is a cross-functional discipline, multiple tools are needed to cover the variety of stages, personas and activities. The set of tools in the pipeline are integrated and the flow of code through the different phases is automated to avoid human error and delays.

DevOps Tools (as per life cycle)

DevOps Tools Image Source

Below are some suggestions:

Planning - Trello, Kanboard, Jira, Slack
Code - Git, SVN, Bitbucket, Eclipse Che
Build - Maven, Gradle, Packer
Test - Apache JMeter, JUnit, Selenium
Release, Deploy, Operate - Kubernetes, Ansible, Terraform, Go, Docker
Monitoring - Grafana, Prometheus, Fluentd, Nagios, Splunk, Istio, Elastic
Feedback - Slack, Jira

Note that there are tons of open source tools available to help businesses to build their pipeline where businesses can evaluate based on their requirements.

Simple Setup - DevOps with OpenShift (Red Hat’s flavour of Kubernetes)

DevOps with OpenShift

The main components of the setup include OpenShift and Jenkins. OpenShift is the container orchestration platform to orchestrate the containers (microservices), with a Jenkins pipeline running outside of OpenShift clusters to facilitate the deployment of applications across different environments (Dev, Test, UAT and PROD). Application testings should be conducted before deployment to each environment. For example, system and smoke test are done in DEV, while functional and security tests are done in TEST.

The pipeline starts when developers commit their codes to the master branch. The whole pipeline is automated and repeatable. Should the application deployment fails at certain stage of the pipeline, the current Live application is not affected and developers can continue to make changes and commit the codes again to trigger the pipeline. A release manager is also in placed to approve the deployment to PROD manually (As PROD is serving Live traffic, it usually requires manual approval).

DevOps with OpenShift is a cloud native approach aligned with a hybrid and multi cloud strategy. OpenShift provides standardized environment for developers regardless of underlying infrastructure (AWS, Microsoft Azure, Google Cloud, etc). As such, businesses can truly enjoy application mobility and portability across different infrastructure.

Conclusion

DevOps adoption is crucial to the success of a digital transformation journey. It enables developers and operations to work closely as one unit throughout all the phases of an application development. DevOps is more than just a project, it is a cultural change which requires companies to break away from conventional mindset. To better understand DevOps, I strongly recommend a novel, The Phoenix Project, it talks about transformation journey and illustrates common problems which are similar to real life.

Leave a comment