Many teams are reporting that development velocity is stuck; they've reached a plateau in moving to more and more releases per month, and now need help on how to improve. According to analyst research, 40% of software development team's top priorities relate to speed/automation, so our overriding vision for Continuous Delivery is to help these teams renew their ability to accelerate delivery.
We follow the well-known definitions from Martin Fowler on the difference between continuous delivery and continuous deployment:
Infrastructure Provisioning and Infrastructure as Code, using solutions like Terraform or other provider-specific methods, is an interesting topic that relates to deployments but is not part of the Continuous Delivery category here at GitLab. For details on solutions GitLab provides in this space, take a look at the category page for our Infrastructure as Code team.
For deployment to Kubernetes clusters, GitLab has a focused category called Auto DevOps which is oriented around providing solutions for deploying to Kubernetes. Check out their category page for details on what they have planned.
We are working on a similar experience for non Kubernetes users, starting with Streamline AWS Deployments that will automatically detect when users are deploying to AWS and will connect the dots for them.
As part of Post-deployment monitoring MVC we want to make it easier to take action when an alert was triggered. gitlab#https://gitlab.com/gitlab-org/gitlab/-/issues/232492 introduces a clickable link from the alert to the environment, which will add more visibility to the environment on which the alert was triggered and let you rollback deployment if needed (from the environments page).
This category is currently at the "Complete" maturity level, and our next maturity target is Lovable (see our definitions of maturity levels). Key deliverables to achieve this are:
Because CI and CD are closely related, the competitive analysis for Continuous Integration is also relevant here. For how CD compares to other products in the market, especially as it relates to pipelines themselves, also take a look there.
As far as CD specifically, Microsoft has always been strong in providing actionable metrics on development, and as they move forward to integrate GitHub and Azure DevOps they will be able to provide a wealth of new metrics to help teams using their solution. We can stay in front of this by improving our own actionable delivery metrics in the product via gitlab#7838.
Harness (with their recent acquisition of Drone.io) is a modern, cloud-native CI/CD platform that provides excellent solutions for delivering to cloud environments using native approaches like Kubernetes. Harness also covers what it calls Continuous Verification - which integrates with existing Monitoring tools (like DataDog, Splunk or CloudWatch) and serves both for verifying advanced deployments as well as an environment monitoring tool they call 24/7 Service Guard. Harness provides a more visual and template based CD pipeline definition process than GitLab.
Spinnaker is an open-source, multi-cloud continuous delivery platform that helps you release software changes. It combines a powerful and flexible pipeline management system with integrations to the major cloud providers and treats deployments as a first-class citizen. However, it also has a weakness that it does not support other stages of the DevOps lifecycle (such as Continuous Integration), while GitLab offers a single tool for your Development needs.
Our goal is to do make it so anything that Spinnaker can do, can also be done via built-in features in GitLab CD.
Spinnaker's advantage points are:
One analysis of GitLab vs. Spinnaker can be found on our product comparison page. There is another high quality one from our VP of product strategy in gitlab#197709. Finally, our PM for this section completed one where which can be found at gitlab#35219. Our next step is to review these and combine in this section of this document as the single source of truth, exhaustively listing the issues we plan to deliver to reach functional parity (or better) with Spinnaker.
We also respect our customers choice to use Spinnaker's CD solution together with GitLab and are working on making that integration easier with gitlab#120085.
In our conversations with industry analysts, there are a number of key trends we're seeing happening in the CD space:
Cloud adoption of CI/CD is growing, extending capabilities for deploying to cloud environments, including Kubernetes and other modern container architectures are a key metric. While cloud migration is accelerating and more teams are adopting it, on-premises and legacy hardware environments remain.
Users are looking for the ability to not just measure platform stability and other performance KPIs post-deployment, but also providie functionality such as automated release-readiness scoring based on analysis of data from across the digital pipelines. Tracking and measuring customer behavior, experience, and financial impact, after deployment via gitlab#37139 solves an important pain point.
Progressive Delivery allows you to deploy code incrementally and target the audience that will receive the new code based on user segments and environments. By doing so, it enables experimentation with reduced risk. Progressive Delivery builds on the foundations laid by Continuous Integration and Continuous Delivery. Related categories to this theme are Feature Flags and Advanced Deployments. To read more about this see RedMonk's post.
The ability to monitor deployments and automatically halt/rollback deployment in case of exceeding a specific error rate is frequently mentioned by CS and in the sales cycle as a feature teams are looking for. This will be implemented via gitlab#3088. We will start by showing alert on the environments page, in case an error threshold is crossed in gitlab#214634 and will iterate on this by adding a button that will allow you to cancel the deployment via gitlab#216949.
Our most popular customer issue is gitlab#30769 which allows deploy keys to push to protected branches. This functionality was previously supported but was removed in 12.0. In order to overcome this limitation, users have been temporarily unprotecting their branches in order to allow developers to push to master. This workaround introduces a security risk, that we do not encourage, so we will solve this problem by adding deploy keys configuration to the protected branches settings, so that the roles and keys will be easily accessed and configured without needing to un-protect the branch.
Adding a check for maximum commits before merge via gitlab#26691 is our most popular internal issue. This adds a validation check, to make sure that your merge request is not too far behind master before merging in order to avoid breaking master
Our top vision item is to Natively support hypercloud deployments, and specifically deploying to AWS we want to help make it easier and quicker to get started and deploy to any one of the big cloud providers using GitLab's CI/CD.