The 9-Point Checklist for Progressive Delivery with GitOps

By Twain Taylor
September 29, 2022

Progressive delivery is all about helping teams pursue CI/CD safely and confidently. Here is a helpful checklist you can use as you adopt progressive delivery in your organization.

Related posts

Progressive Delivery: Towards Continuous Resilience with Flagger & Weave GitOps

A Pocket Guide to Progressive Delivery with GitOps

Progressive Application Delivery with Weave GitOps - automation with precision and control

Progressive delivery is emerging as a worthy successor to continuous delivery by enabling developers to control how new features are launched to end-users. Its wide popularity is owed to the demand for faster and more reliable software releases. The increasing emphasis on customer experience has made continuous delivery an inadequate methodology. Large enterprises like Netflix, Amazon, and Uber are turning to progressive delivery to test and release code in a phased and controlled manner.

In a nutshell, progressive delivery empowers developers to plan and implement code changes to a subset of users and then expand it to all users. The progressive roll-out of features is executed through techniques like blue-green deployment, feature flagging, and canary deployments. You can mitigate issues that come up by promoting a version to all users only when you’re confident that it is performant and reliable. And if it fails in production, the impact radius is restricted to a subset of users, and the update can be rolled back immediately.

Executing progressive delivery successfully needs thorough planning and oversight. To help with the adoption of progressive delivery, we’ve put together a 9-point checklist to help you through the process.

The GitOps Progressive Delivery Checklist

1. Adopt Kubernetes and GitOps Principles for Application Development

Building better software at a faster pace is the only way businesses can compete in this era of disruption. Kubernetes helps you with just that. It streamlines workflows, speeds up product development, and reduces time-to-market. Its evolution from a simple orchestration tool to a development paradigm has completely changed how organizations manage their containers and infrastructure.

GitOps, meanwhile, is a ‘way to do Kubernetes cluster management and application delivery.' It is based on a set of principles to manage deployment through a version control system like Git. GitOps uses Git as the single source of truth to streamline infrastructure management. By storing the desired state of the system declaratively, you automate application development through pull requests.

Kubernetes and GitOps together lay the foundation for progressive delivery. They enable systems to be declarative and controlled - prerequisites for progressive delivery.

2. Begin Automating Deployments

One core tenet of both GitOps and progressive delivery is deployment automation. Therefore, one of the first things you need to do is make a list of changes or tasks that can be automated. However, ensure that bad code or vulnerabilities don’t slip into your codebase as you pursue automation.

GitOps is about automating the continuous delivery part of the pipeline. Progressive delivery takes this a step further by enabling release methodologies like canary releasing. Every organization is at a different point in its deployment automation journey. Depending on where your organization is, you may need to start by reducing manual deployments.

3. Implement Security and Governance Policies

Security should not become an afterthought as you mature to progressive delivery. With GitOps you can execute a number of security and compliance standards through concepts like security-as-code and configuration-as-code. The goal here is to define and enforce security and compliance policies across the enterprise right from Git.

Security and compliance can no longer be left to manual reviews. Weave GitOps includes a policy engine that scans every change before it makes it to production. If a change is found to be violating any policy, that change is not allowed to be automatically deployed. Weave GitOps flags it as an issue and allows you to investigate further. This method of leveraging policies and policy-as-code is essential to make progressive delivery a success.

4. Adopt A Service Mesh for Networking

Progressive delivery requires advanced traffic routing across services and application versions. This is more complex than traditional client-server networking and requires modern networking tools like service meshes. Istio and Linkerd are the most widely used service meshes. These tools are built to facilitate networking in a cloud-native Kubernetes system. Before you begin progressive delivery, ensure to adopt a service mesh tool as a foundation for traffic routing.

5. Pick the Right Tools to Make Up your GitOps Pipeline

GitOps has a wide array of tools that facilitate your deployment pipeline. However, you will have to pick the ones that fit well with your workflows. There are capable tooling options like Flux - a GitOps agent that automates the movement of code through the stages; Flagger - a progressive delivery solution that allows you to manage canary releases using policies; Helm - a tool that manages Kubernetes applications and Kustomize - that automates Kubernetes configuration.

However, stringing together these tools on your own can be a tedious task. They would require dedicated maintenance, and may even slow down the progress you make. A better alternative is to use a solution like Weave GitOps that brings together all these tools (Flux, Flagger, Helm, Kustomize, and more) into a single management platform. Weave GitOps allows you to manage your Kubernetes clusters and deployments from a single place. Weave GitOps is the fastest route from manual deployments to automated deployments to progressive delivery.

6. Select an Ideal Toolkit for Progressive Delivery

Apart from laying the foundation with Kubernetes, GitOps, and a service mesh, the key piece to the entire puzzle is a purpose-built progressive delivery tool. Flagger, now part of Weave GitOps, has emerged as the leading progressive delivery tool for a cloud-native world. It is a progressive delivery tool that safely releases your applications to your audience through an automated process. You can employ a variety of feature release techniques including blue-green mirroring and A/B testing.

Flagger integrates with a service mesh tool to gradually shift traffic from an older version of the application to a newer version. You can also use an ingress controller like Skipper, NGINX, and Contour for this purpose. Further, Flagger’s declarative approach makes it an ideal fit to integrate with core GitOps tools such as Flux.

The best part is that Flagger comes integrated with Weave GitOps along with all the other GitOps tooling mentioned above. Weave GitOps allows you to apply policies for precise control over the progressive delivery process. You can set policies to incrementally increase traffic only if certain conditions are met. For example, if latency is under 1 second for service A, increase traffic to it by 10% every hour. This is tedious and error-prone if done manually, but is effortless with Weave GitOps.

7. Pick your Favorite Progressive Delivery Tactic

Progressive delivery is basically a practice of limiting the audience for your code changes or new feature releases. It is done to restrict the exposure area to a minimum in case of any risk instances. Progressive delivery can be implemented through a number of strategies like below:

  • Canary releasing - Channeling a limited amount of traffic to a new ‘canary’ service, and only if it passes reliability tests, you gradually shift all traffic from the old to the new service, and the canary becomes the default version.
  • Feature flag management - You can control code launch remotely through a toggle-like feature, which enables you to roll back changes in case of any failures immediately
  • Blue-green deployment - You gradually transfer traffic from an existing application (blue) to a newer one (green), while the blue version acts as a backup
  • A/B testing - In this strategy, you expose two different categories of the audience to two different application versions and analyze the performance to decide the ideal version.

Which tactic you pick depends on your goals, and which you think would fit your organization best.

For a detailed outline of the different strategies to progressively deploy an application into production, check out this blog here.

8. Outline the Metrics you Want to Measure

With progressive delivery, you can significantly reduce risk. This is because you continuously test code changes, analyze performance and implement your learnings all in real-time. To ensure that this happens seamlessly, it is crucial to list the metrics and KPIs for the success of your release. A capable solution like Weave GitOps enables you to collect data on the feature’s performance, and identify problem areas, and performance bottlenecks. These insights will help you make improvements rapidly. With these metrics built-in, and available in real-time, you won’t have to struggle to gain end-to-end visibility into every release.

9. Train Team on New Tools and Processes

Once you’ve laid the foundation, selected the tooling, and picked your tactic, the last part is perhaps most important - getting your entire team on board.

Both GitOps and progressive delivery triggers a cultural change across the organization. It introduces your team to new tools, methodologies, and workflows. For first-timers, these methodologies might seem a bit daunting. Developing a deep understanding of tools and techniques will take time. You will have to plan training sessions for your team to familiarize themselves with new processes like canary releasing, rollbacks in case of a failure, and familiarizing everyone with GitOps tooling. Fostering an in-house ecosystem for engineers to experiment and collaborate on these new tools fosters a healthy culture.

This training and onboarding process can be easier if you have detailed documentation of individual responsibilities and overall workflow. Runbooks that are simple to follow can be handy. This helps in avoiding or tackling conflicts between teams. Great documentation also helps in keeping record for future references and continuous improvement.

Conclusion

Progressive delivery is a concept that evolved from continuous delivery keeping the existing market demands in mind. With large enterprises trusting this delivery methodology, it is time for companies to apply progressive delivery for faster and improved application releases. Implementing progressive delivery with GitOps will act as a significant catalyst for your application development process.


Related posts

Progressive Delivery: Towards Continuous Resilience with Flagger & Weave GitOps

A Pocket Guide to Progressive Delivery with GitOps

Progressive Application Delivery with Weave GitOps - automation with precision and control

Whitepaper: Progressive Delivery with GitOps

A handy pocket guide covering the benefits of Progressive Delivery, how it works and how you can get started today.

Download Now