DevOps and CI/ CD - Faster time to market
Tags: devops, agile, cloudnative, microservices
Published: 2020-10-21 22:58:36

This post will talk about DevOps and Continuous Integration / Continuous Delivery to bring new products and services faster to market. 

**What is DevOps?**

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.

DevOps is intended to be cross-functional mode of working, which uses wide variety of toolset that fits into one of the below category. 

* Coding – code development and review, source code management tools, code merging.
* Building – continuous integration tools, build status.
* Testing – continuous testing tools that provide quick and timely feedback on business risks.
* Packaging – artifact repository, application pre-deployment staging.
* Releasing – change management, release approvals, release automation.
* Configuring – infrastructure configuration and management, infrastructure as code tools.
* Monitoring – applications performance monitoring, end-user experience.

As we have seen in cloud-native series, cloud-native systems embrace microservices, containers, and modern system design to achieve speed and agility. But that's part of the story. How do we provision cloud environment? How do we rapidly deploy new features and updates? That's where DevOps Automation comes into picture - Infrastructure Automation and Deployment automation. 

**Infrastructure Automation** 

This is popularly known as Infrastructure as Code (IaC), it enables to declaratively script and provision the required cloud infrastructure.

The cloud resources are parameterized and dynamic, version-controlled as an artifact with code. The parameters can change across environments such as dev, qa, staging and prod. But it allows to have consistent and repeatable infrastructure across environments. 

Terraform, Azure ARM and AWS Cloudformation are such IaC tools, and terraform is widely used. 

Following image has some basic terraform commands.
 
 ![Basic Terraform Commands](https://dev-to-uploads.s3.amazonaws.com/i/t40v5w6o8fbavfsckd1i.JPG)


**Deployment Automation**

12-factor app principles discussed earlier in first part of this blog series mentions about principle 5 - Each release must enforce a strict separation across the build, release and run stages. Each should be tagged with a unique ID and support the ability to roll back.

Modern CI/ CD Pipelines allow to fulfill this principle. 

Following diagram shows typical flow for setting up CI/ CD pipelines. 

![CI/ CD Pipelines](https://dev-to-uploads.s3.amazonaws.com/i/a7y0hhuhb61f8y70rf21.JPG)

* CI - Continuous Integration part is where the code push triggers a build stage that transforms the code into a binary artifact.

* CD - Continuous Deployment part is where the release stage picks up the binary artifact, applies external application and environment configuration information, and produces an immutable release. The release is then deployed to a specified environment.

And finally, the released feature is run in the target execution environment. Releases are immutable meaning that any change must create a new release.

Azure DevOps is one-stop solution for all DevOps and agile needs for embracing automation. All other public cloud providers offer parallel tools for DevOps and CI/ CD. 

Following image shows CI/ CD pipelines flow using Azure DevOps. 

![Azure DevOps - CI/ CD Pipeline](https://dev-to-uploads.s3.amazonaws.com/i/4vy9fxd61ygesdq0hq5v.jpg)

**DevOps Culture Adoption**

By adopting DevOps culture in organizations and using automation mentioned above, Organizations have achieved significantly faster time to market. Moved from one in a quarter release to on-demand updates or at least per week / per sprint release cycle. The goal is to release frequently, gather feedback and fail-fast early in the development cycle, when it is less expensive to improvise / fix. CI/ CD practices allows better collaboration across teams and software quality, as it automates mundane, repeated tasks. DevOps adoption is key for achieving high performance across organization as it lets teams focus efforts on building important business features and bring growth. 

I hope you enjoyed reading this cloud-native series and learnt something new. Cloud-native application empowers digital disruption to brings better products and services to market - with quality and speed. 

Happy journey to cloud-native adoption and transformation ! 

Please like, share and comment your views/ opinion.

Disclaimer - This post is my personal opinion and does not reflect those of any of my past, present or future employers or affiliations.