Harness as a Software Continuous Delivery Platform

Eduar Baron
Globant
Published in
7 min readDec 26, 2023
Source: AI

During my recent involvement in a major bank project, we encountered challenges related to the manual creation, updating, and destruction of environments. By environments, we refer to the set of resources and platforms that serve as the runtime for the applications we use, for example, testing, development, and production environments; depending on the dynamics of the projects, the number of environments can be much greater. We employed various tools such as Terraform, Helm Charts, custom shell scripts, and manual intervention. However, as the number of environments and updates to our infrastructure increased, managing it became increasingly difficult. To address this issue, we initiated a search for a new tool that could automate these tasks while adhering to best practices.

To begin, our company did research to find a tool that could effectively handle infrastructure and application versioning management across different environments. Ultimately, we discovered that Jenkins, our current tool for delivery, provided automation features for general purposes within the DevOps realm. However, Jenkins lacked a set of features that could handle environment and application management without the use of scripting or custom coding for Continuous Delivery (CD) processes. As a result, our team explored numerous CD tools in the industry and identified CircleCI and Harness as the top contenders for our use case. The tool to be selected should align with the company’s guidelines, emphasizing quick implementation, industry recognition, and strong technical support from a thriving community. Based on that criteria, we decided to choose Harness as the most suitable option.

In this article, we will share with you our experience with Harness for Continuous Delivery, the reasons why we decided to use it, and how we used this tool to model our Continuous Delivery process.

What’s Harness?

Harness is a platform that offers solutions for all phases of software delivery aimed at accelerating innovation and delivering software faster. It provides specialized tools for each step in the Software Development Life Cycle (SDLC), such as Continuous Integration, Continuous Delivery, Feature Flags, Chaos Engineering, and Continuous Error Tracking. Harness is known in the DevOps industry for offering the tools needed to cover all the steps in the SDLC.

Harness is available in different editions: Enterprise, Team, Community, and Free. The main difference between these editions has to do with the support SLA, the number of builds per month, the available features, and the availability of the source code. The following picture gives more details on the differences between each edition:

Harness product editions — Source: Harness pricing and plans

In this article, we will focus on the Harness Continuous Delivery tool, showcasing its key features that made Harness an excellent option for our use case. But first, let’s remember what is Continuous Integration and Continuous Delivery.

What is Continuous Integration and Continuous Delivery

Below, we have the definitions of Continuous Integration and Continuous Delivery:

  • Continuous Integration(CI) is the list of tasks that occur in the initial software development process up to the deployment of the application to be executed somewhere. Examples of these tasks are coding, static revisions of code, utility integration, code build, artifacts generation, and artifacts checks.
  • Continuous Delivery (CD) is the list of tasks necessary to deploy the resulting application from the previous CI process somewhere; this could be a Kubernetes cluster, in a cloud provider, or on-premises, for example. Some tasks in CD include the application deployment, updates, fixes, administration, and monitoring of the infrastructure and applications.

In the following diagram, we can see each of the software development phases distributed within the CI and CD processes:

CI/CD in the Software Development Life Cycle context
Source: Medium glasswall-engineering blog

As we said before, we want to show how we can implement our Continuous Delivery processes with Harness CD. To accomplish this, we are going first to explain each of its key features.

Harness CD Features

With the following Harness CD functionalities, our project reduced infrastructure deployment effort and deployment time and improved the effectiveness of deploying our infrastructure environments.

Automated Canary and Blue-Green deployment strategies

With the automation of Canary and Blue-Green deployment strategies, we were able to define steps to create our infrastructure quickly and without using custom coding. These deployment strategies offered greater speed, security, and efficiency when we were creating our infrastructure using IaC. Without Harness, implementing these strategies manually would require a lot of knowledge of each technology used.

Enhancing deployments with Harness for control and visibility

Harness deployment strategies are focused on always having visibility and control in each of the automated pipeline stages and the deployment monitor dashboard. This gives us benefits in the verification and rollback tasks of the deployments to make quick decisions automatically or manually, depending on the result. The following image gives us a glimpse of this dashboard:

Harness overview dashboard — Source: harness.io

AI-driven automated fault detection and rollback in deployments

Using artificial intelligence and machine learning, Harness CD can automatically identify faulty deployments by analyzing data and logs obtained from internal observability solutions. Furthermore, it provides the ability to automatically roll back to a previous version, eliminating the need to monitor the console for long periods.

Streamlined Infrastructure Management and Version Control Integration

Harness CD is composed of automated infrastructure provisioning capabilities that allow us to integrate with popular technologies for Infrastructure as Code like Terraform, cloud providers, and code repositories, among many others. This allows our environments to be properly managed in a version-controlled manner.

Automated continuous verification for quality assurance

To control and supervise the execution of our workflows in Harness CD, we can define integrated approval steps, test tasks, verification routines, or notification steps within the deployment tasks. This automated continuous verification ensures quality and reliability and reduces manual intervention.

Use Cases

Now, we will explain the use cases in which Harness CD helped us improve our projects, streamlining and strengthening the process of the delivery solutions.

Deployment of infrastructure environments using templates

We can create templates that we can use to reuse logic and configurations such as secrets, environment variables, or tools installation like Terraform or Ansible when creating a pipeline. Harness provides several types of templates that we can use: steps, groups of steps, stages, pipelines, deployments, services, and many others. With pipeline templates, we can reuse the definition of our pipelines and avoid having to reimplement them for different types of environments and types of infrastructure.

Updating infrastructure environments

This is one of Harness’s features that most impressed us when administering environments since updating environments in software development projects is something that happens very frequently. Templates allow you to encapsulate all logic and resources needed to run a specific project and execute them in a reliable and repeatable way, define approval steps, and monitor the execution of all components. For example, we can quickly create and destroy temporary environments mirroring our live environments (qa, dev, staging, prod). This enables us to perform tasks like load or security testing without impacting the real environments, minimizing the risk of disruptions.

Application deployment

Until now, we have discussed the deployment of infrastructure, now we will continue with the deployment of applications. With Harness, we can create pipelines that aim to perform all the configurations and actions, such as environment variables, tools installation, OS hardening, etc., necessary to run our applications on the infrastructure that supports them. For these tasks, Harness provides preloaded adapters for technologies that are compatible with the most used tools ​​in the industry, allowing us to create pipelines that can be accommodated for any need. Infrastructure deployments can be monitored using the web GUI, slack, or mail notifications and logs systems, or tools such as Prometheus, Kibana, Jira, Slack, etc., can be integrated too. One of the most used features in our projects was the deployment of applications on Kubernetes clusters using Helm.

Conclusions

In this article, we reviewed the main features of Harness CD and how we applied them in our projects to help us improve the delivery of our applications. The biggest gain we had from using Harness was being able to create, manage, and configure environments in an easy, fast, and predictable way. Within my personal experience of creating software, in all the projects I have worked on, there has always been this need and problem of being able to create, maintain, manage, and destroy environments without generating collateral effects.

Using the canary and blue-green deployment strategies that Harness offers us, we were able to implement workflows that did the configuration and deployment tasks of the applications without investing a lot of time in coding. This allowed us to save time in code quality verification periods since we created these pipelines using the templates and adapters that Harness offers by default.

When we automate the tasks of infrastructure creation and application deployment, we create significant challenges in terms of tracking, monitoring, and verifying the activities performed automatically. Harness solves these challenges for us through the use of automatic task result verification and rollback functionality, facilitating the visibility and certainty of the results of the environment creation and application deployment processes. This is achieved through the use of Harness’s functionalities and utilities without the need to implement or use any custom tools.

References

--

--