GitLab Features
Fundamentally changing the way Development, Security, and Ops teams collaborate and build software - GitLab provides all of the essential DevSecOps tools in one DevSecOps platform. From idea to production, GitLab helps teams improve cycle time from weeks to minutes, reduce development costs, speed time to market, and deliver more secure and compliant applications.

Continuous Delivery
GitLab's integrated CD solution allows you to ship code with zero-touch, be it on one or one thousand servers.
GitLab helps automate the release and delivery of applications, shortening the delivery lifecycle, streamlining manual processes, and accelerating team velocity. With zero-touch Continuous Delivery (CD) built right into the pipeline, deployments can be automated to multiple environments like staging and production, and the system just knows what to do without being told - even for more advanced patterns like canary deployments. With feature flags, built-in auditing/traceability, and on-demand environments, you'll be able to deliver faster and with more confidence than ever before.

Auto DevOps
Automatically discover, build, test, and scan source code, and deploy and monitor built applications using an opinionated but highly customizable set of CI/CD templates and integrations. Enable teams to focus on writing business code and better collaboration while delivering software faster.
Auto DevOps
Auto DevOps
Auto DevOps brings DevOps best practices to your project by automatically configuring software development lifecycles by default.
It automatically detects, builds, tests, deploys, and monitors applications.
Continuous Delivery
Ensure compliant application delivery pipelines with deployment approvals. Deploy on schedule with scheduled pipelines and deploy freezes. Track deployments with environments and provide the necessary reports through audit trails.
Continuous Delivery
Operations Dashboard
Visualize the history and current status of pipelines across projects and groups all in a single dashboard that can be customized for each user.
Continuous Delivery
Deploy from Chat
Deploy from one environment (e.g. staging) to any other (e.g. production) from Chat
Continuous Delivery
Protected Runners
Protected Runners allow you to protect your sensitive information, for example deployment credentials,
by allowing only jobs running on protected branches to access them.
Continuous Delivery
Timed and manual incremental rollout deployments
GitLab can allow you to deploy a new version of your app on Kubernetes starting
with just a few pods, and then increase the percentage if everything is working fine.
This can be configured to proceed per a schedule or to pause for input to proceed.
Continuous Delivery
Canary Deployments
GitLab Premium can monitor your Canary Deployments when
deploying your applications with Kubernetes. Canary Deployments can be configured directly through .gitlab-ci.yml
, the API, or from the UI of the Deploy Boards.
Continuous Delivery
Deploy Tokens
Provide read-only access to specific repositories or container images to external infrastructures
that need to access your data, for example to deploy applications on Kubernetes. This setting is available for project and group level.
Continuous Delivery
Deploy Keys
Deploy keys allow read-only or read-write access to your repositories by importing an SSH public key into your GitLab instance.
Continuous Delivery
Pipeline Resource Groups
Allows limiting the concurrency of running jobs to permit only one deployment per resource group at any given time. Resource groups are also supported for parent-child and multi-project pipelines.
Continuous Delivery
Robust deploy and rollback bundle
Encapsulate knowledge of deploying and rolling back into something more than a script, perhaps similar to a k8s operator. Something that knows how to handle failure. e.g. if you’re deploying 7 services and one fails, you can’t just stop, you probably have to rollback the 6 that succeeded, as well as the 7th that failed. (Now, depending on implementation, it still might be a script that triggers some kind of operator). GitLab can deploy and rollback, but only via scripts with limited error handling.
Continuous Delivery
Auto Rollback in case of failure
If a critical alert is triggered on production, Auto rollback rolls your deployment back to the last successful deployment.
Continuous Delivery
Pre-written deploy target mechanisms
GitLab Auto DevOps knows how to deploy to Kubernetes. Other vendors have built-in mechanisms to deploy to AWS VMs, Fargate, etc.
Continuous Delivery
Load balancer management for Blue/Green deployment
Blue/green deployment requires switching traffic from one set of servers to another. With GitLab today, you can manage of your load balancer via scripts, but it's not built in as a first-class citizen.
Deployment Management
Deploying applications from testing environments to multi-region production servers is a core requirement of DevSecOps. Deployments should be easy to codify for platform engineers and simple to interact with for engineers and release managers. Moreover, they should follow company requirements in terms of compliance and security. Deployment management supports multi-cloud, cloud-native, and legacy infrastructures and unifies the platform experience by integrating tools and frameworks, such as Flux for GitOps.
Deployment Management
Environment-specific variables
Limit the environment scope of a variable by defining which environments it can be available for.
Deployment Management
GitLab Agent for Kubernetes
Manage the deployments and connection to your Kubernetes clusters in a secure and compliant way, driven by code. The agent supports push and pull-based deployments and operational container scanning with fine-grained access controls.
Deployment Management
Fine-grained access controls for CI/CD based Kubernetes deployments
Restrict GitLab CI/CD deployment jobs using Kubernetes RBAC
Deployment Management
GitOps deployment management
Run GitOps-style deployments tightly integrated into GitLab
Deployment Management
Timed and manual incremental rollout deployments
GitLab can allow you to deploy a new version of your app on Kubernetes starting
with just a few pods, and then increase the percentage if everything is working fine.
This can be configured to proceed per a schedule or to pause for input to proceed.
Deployment Management
Canary Deployments
GitLab Premium can monitor your Canary Deployments when
deploying your applications with Kubernetes. Canary Deployments can be configured directly through .gitlab-ci.yml
, the API, or from the UI of the Deploy Boards.
Deployment Management
Complex, simultaneous deployments per environment
Canaries, blue/green deploys, and other simultaneous deployment concepts where an environment, like production, would have multiple deployments running at the same time. GitLab has this information, and can even show canary deployments in the deploy board, but in some other places only shows the most recent deployment.
Deployment Management
Load balancer management for Blue/Green deployment
Blue/green deployment requires switching traffic from one set of servers to another. With GitLab today, you can manage of your load balancer via scripts, but it's not built in as a first-class citizen.
Environment Management
Environments are at the center of DevSecOps, bringing the results of application development in front of the users. They provide traceability of deployments, visualisation of workload states, and support advanced rollout strategies, feature flag management, and when necessary rollbacks.
Environment Management
Environments and deployments
GitLab CI is capable of not only testing or building your projects, but
also deploying them in your infrastructure, with the added benefit of
giving you a way to track your deployments. Environments are like tags for
your CI jobs, describing where code gets deployed.
Environment Management
Per-environment permissions
Developers and QA can deploy to their own environments on demand while production stays locked down. Build engineers and ops teams spend less time servicing deploy requests, and can gate what goes into production.
Environment Management
Environment-specific variables
Limit the environment scope of a variable by defining which environments it can be available for.
Environment Management

Protected Environments
Specify which person, group, or account is allowed to deploy to a given
environment, allowing further protection and safety of sensitive environments.
Environment Management
Environment type
When defining an environment in .gitlab-ci.yml
, in addition to the environment name
, you can define the environment type
, which can be one of: production
, staging
, testing
, development
, or other
.
Environment Management

Environments Dashboard
Visualize cross-project environments, track change flow from development to production, track pipeline status and diagnose issues from a single dashboard.
Environment Management

View alerts on the Environments page
Seeing triggered alerts alongside the status of your environments enable you to take immediate action to remedy the situation.
Environment Management
Manage access to protected environments from the API
GitLab offers users the ultimate flexibility of setting up and configuring Environments via the API or UI. We also support Maintainer's control of access to Protected Environments via API.
Feature Flags
Reduce deployment risk with a progressive rollout strategy that includes feature flags — enabling teams to toggle feature availability, test features in small batches, and separate deployment from customer launch.
Feature Flags

Feature Flags
This feature gives you the ability to configure and manage feature flags for
your software directly in the product. Simply create a new feature
flag, validate it using the simple API instructions in your software,
and you have the ability to control the behavior of your software
via the feature flag within GitLab itself. Feature Flag strategies can be set per environment . GitLab Feature Flags includes an
API for interacting with them.
Feature Flags

Feature Flag List view
This feature gives you the ability to view all the feature flags configured in a project. You can toggle the flags on or off directly from this page, and view all the associated information for a flag. This includes the strategies linked to the flag, the number or percent of users affected, and the environments.
Feature Flags

Percent of Users Strategy for Feature Flags
You can select "Percent of Users" as a rollout strategy for your feature flags. This allows percentages to be set individually for each environment and each flag. When "Percent of Users" is configured and the flag is enabled, the feature will be shown to the configured percentage of logged-in users. This allows you to do controlled rollouts and monitor the behavior of the target environment to ensure the results are as expected.
Feature Flags

Flexible Rollout Strategy for Feature Flags
You can define the stickiness of the rollout strategy. This can be based on the session ID or user ID, or random (no stickiness). This gives you more control over the rollout and also opens the option for supporting stickiness for anonymous users.
Feature Flags

UserID Rollout Strategy for Feature Flags
You can choose "User ID" as a rollout strategy for your feature flags. The User ID strategy allows you to specify a comma-separated list of User IDs and then toggle a feature flag only for the specified users. This can allow you to target testing features with specific cohorts or segments of your userbase.
Feature Flags
Set multiple strategies per environment
You can define multiple strategies independent of environments via API and/or UI.
Feature Flags

User List Strategy for Feature Flags
You can choose "User List" as a rollout strategy for your feature flags. User lists can be reused for multiple feature flags while allowing you to manage them in a single location. You can create Feature Flag user lists from the API, and edit or delete them from the API or UI.
Feature Flags

Associate Feature Flags with the issue(s) that is related to them
You can create a link from the issue that introduced the Feature Flag to the Feature Flag itself. That relationship is visible in the Feature Flag details. Feature Flags also support Markdown and can be referenced from any issue.
Infrastructure as Code
Automate the provisioning of infrastructure resources through Infrastructure-as-Code, use Terraform/OpenTofu with zero-configuration from CI/CD pipelines, and apply GitOps best practices to deliver software faster.
Infrastructure as Code

Terraform plan output summary in Merge Requests
A merge request widget shows the summary of expected infrastructure changes after a terraform plan
run
Infrastructure as Code
GitLab-managed Terraform state files
You can configure GitLab once at the instance level to use a specific object storage for all Terraform state files. This way you can start a new infrastructure project with minimal boilerplate. The state files are encrypted and versioned. GitLab provides you CI templates, UI and APIs to manage Terraform state files.
Release Orchestration
Coordinate complex releases across multiple projects in an efficient way. Leverage scheduled delivery, blackout periods, parallelization and sequencing, and support for integrating manual processes to release software faster.
Release Orchestration
Create a release from the UI
You can create a release by associating it to a new or existing tag. This functionality is supported both in the UI and API. With this feature, users have more flexibility when planning releases and can associate tags to releases.
Release Orchestration
Environments history
Environments history allows you to see what is currently being deployed on your servers, and to access a detailed view for all the past deployments.
From this list you can also re-deploy the current version, or even rollback an old stable one in case something went wrong.
Release Orchestration
Environment-specific variables
Limit the environment scope of a variable by defining which environments it can be available for.
Release Orchestration

Keep track of releases using GitLab Releases
GitLab's Releases feature allow you to track deliverables in your project. Consider them a snapshot in time of the source, build output, and other metadata or artifacts associated with a released version of your code, and receive notifications when new releases are available for projects you track, including for guests of your project.
Release Orchestration
Group-level release analytics
View how many releases belong to this group and what percent of the projects are associated with releases at the group level
Release Orchestration
Pipeline Resource Groups
Allows limiting the concurrency of running jobs to permit only one deployment per resource group at any given time. Resource groups are also supported for parent-child and multi-project pipelines.
Release Orchestration

Associate Releases with Milestones
The way many teams use GitLab, ourselves included, is to have a milestone for the release
that everything tracks to. Some teams may also have more than one sprint that makes up a
release. With GitLab you can associate a milestone (or more) to a release; this will populate the
release page with issues and merge requests included in the release(s).
Release Orchestration
Manage access to protected environments from the API
GitLab offers users the ultimate flexibility of setting up and configuring Environments via the API or UI. We also support Maintainer's control of access to Protected Environments via API.
Release Orchestration
Release Progress view
The progress percent complete of issues within a release.
Release Orchestration
Deploy Freeze
Easily lock changes to target environments during defined time periods.
Release Orchestration
Link runbooks to a Release
Runbooks can contain a series of steps related to executing a successful release. Link these plans to the Release page in GitLab to coordinate activities across teams, inside and outside of GitLab.
Release Orchestration
Create a release directly from the .gitlab-ci.yml via the release CLI
GitLab supports creation of a release directly from the .gitlab-ci.yml via the release CLI. The name and description can be configured directly in the .gitlab-ci.yml or read from another file in the repository.
Release Orchestration
Generic Package Registry
GitLab supports a wide variety of languages in our Package Registry offering. However, you may want to store other binary types in GitLab that are not yet supported. GitLab supports raw package feeds (like you could do in Nexus) to a Generic Package Registry. Looking forward, this feature helps create the foundation for Release Assets and will ultimately make it easier for you to package and release your software with GitLab.
Release Orchestration
Changelog
The changelog allows you to log all changes contained in a release.