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 Integration
Keep strict quality standards for production code with automatic testing and reporting.
GitLab helps delivery teams fully embrace continuous integration to automate the builds, integration and verification of their code. GitLab’s industry leading CI capabilities enables automated testing, Static Analysis Security Testing, Dynamic Analysis Security testing and code quality analysis to provide fast feedback to developers and testers about the quality of their code. With pipelines that enable concurrent testing and parallel execution, teams quickly get insight about every commit, allowing them to deliver higher quality code faster.

Continuous Integration (CI) Scaling
Automatic CI/CD pipeline cleanup
Use a project setting to set a CI/CD pipeline expiry time. Any pipelines and related artifacts
older than the defined retention period are deleted.
Continuous Integration (CI)
Streamline your software development lifecycle with continuous, automated building, testing, and deploying of iterative code changes. This ensures the early detection of integration issues, bugs, and security vulnerabilities before deploying to production.
Continuous Integration (CI)

Built-in CI/CD
GitLab has built-in Continuous Integration/Continuous Delivery, for free, no need to install it separately. Use it to build, test, and deploy your website (GitLab Pages) or webapp. The job results are displayed on merge requests for easy access.
Continuous Integration (CI)
Scheduled triggering of pipelines
You can make your pipelines run on a schedule in a cron-like environment.
Continuous Integration (CI)
Customizable path for CI/CD configuration
You can define a custom path into your repository for your CI/CD configuration file.
Continuous Integration (CI)
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 Integration (CI)
CI on Protected Branches
The ability of running CI/CD pipelines on protected branches is checked against a set of security rules that defines
if you're allowed or not. It includes creating new pipelines, retrying jobs, and perform manual actions.
Continuous Integration (CI)
Step folding for CI/CD logs
Collapse the job log output for each command.
Continuous Integration (CI)

CI/CD for external repo
Connect your projects hosted on external services (like GitHub or Bitbucket) and leverage
the power of GitLab CI/CD pipelines to build, test, and deploy your applications easily.
Continuous Integration (CI)

CI/CD for GitHub
Connect your projects hosted on GitHub and leverage
the power of GitLab CI/CD pipelines to build, test, and deploy your applications easily.
Continuous Integration (CI)
Pipeline deletion
Deleting a pipeline is possible using the API and also in the UI on the Pipeline Details page. This allows for cases where perhaps
secrets have been leaked in a pipeline, many unneeded pipelines have been created, or
other issues have occurred where pipelines need to be deleted.
Continuous Integration (CI)
Trigger pipeline on any event in code repository
Enables pipelines/workflows to be started based on when any defined event is executed in the code repository. For example, could run a workflow to send a welcome email on adding a new member to a repository or project.
Continuous Integration (CI)
Store CI configuration outside the repository
Specify the path of the .gitlab-ci.yml as an arbitrary URL to store CI configurations in a repository other than the one being built. This allows for processing hundreds of repos the same way by pointing all of them to the same external gitlab-ci.yml file, and gain efficiency by having only one CI configuration file to update for multiple repositories. Use cases where a service generates the configuration file dynamically would also benefit. The ability to host the .gitlab-ci.yml file in another project enables CI configurations access control in a scalable way as the owners of the project hosting the file could restrict write access to prevent changes by unauthorized users.
Continuous Integration (CI)
Cross-project jobs with artifact dependencies
Run a job in your current project that depends on the latest artifact produced by a job in another cross-project pipeline.
Continuous Integration (CI)
Parent-child pipelines
When one pipeline serves as a parent of one of more child pipelines, it removes many of the challenges of complex pipeline creation. Performance can be improved because child pipelines can run concurrently based on trigger configurations in the parent pipeline. As an added bonus, decomposing a single, complex, pipeline into a parent pipeline with multiple children simplifies pipeline visualization and ultimately improves comprehension for the entire team.
Continuous Integration (CI)
Troubleshoot failed jobs with root cause analysis
Use root cause analysis to troubleshoot job failures quickly.
Merge Trains
Coordinate frequent merge requests and avoid merge conflicts with Merge Trains, preventing code commits from breaking default and main branches.
Merge Trains
Merge request pipelines
Specify when you want jobs to run only when they are in a pipeline associated with a Merge Request. Make your pipelines more efficient by running only the necessary jobs for Merge Requests.
Merge Trains
Merged results pipelines
Keep master green. A special pipeline runs on the results of merged code before merging into master to detect changes that may be green on a branch but will fail master when merged.
Merge Trains
Merge Trains
Reduce pipeline queueing and waiting time with merge trains which allows parallel pipeline execution, with each pipeline building off the merge result of the previous one.
Merge Trains
Run pipelines in the parent project for MRs from forks
A member of the parent project with appropriate permissions can run pipelines from a forked MR using the parent project's pipeline configuration and runners. This adds another layer of security to verify that there's no malicious activity in the forked MR that could affect the parent project.
Code Testing and Coverage
Code testing and coverage are important parts of a Continuous Integration framework, ensuring that source code is validated by test suites and individual pipeline components perform as expected.
Code Testing and Coverage
Show code coverage rate for your pipelines
GitLab is able to parse job output logs and search, via a customizable regex, any information created by tools like SimpleCov to get code coverage.
Data is automatically available in the UI and also as a badge you can embed in any HTML page or publish using GitLab Pages.
Code Testing and Coverage

Browser Performance Testing
Easily detect performance regressions for web apps and pages prior to merging into master.
Browser Performance Testing is included in
Auto DevOps,
providing automatic performance analytics of the root page with
zero configuration.
Code Testing and Coverage
Load Performance Testing
Easily detect performance regressions for APIs prior to merging into master.
Code Testing and Coverage

Repeat failed test notification
Finding out if a test failed in one of your previous pipelines is a slow process. However, that knowledge is invaluable to determine if a test failure should be addressed further or if the failure may just be due to a flaky test. GitLab provides a counter showing how many times a test has failed previously in a project's pipelines.
Code Testing and Coverage

Graph Code coverage changes over time
Tracking how code coverage changes in a branch over time can be a time consuming and low value task for a team. GitLab now provides a simple graph to show how calculated code coverage values are trending over time.
Code Testing and Coverage

Group Code Coverage Data
Tracking code coverage changes for multiple projects can be a time consuming and low value task for a team lead. GitLab provides a page that aggregates the code coverage data for a group's projects and makes it available for download.
Code Testing and Coverage

Unit Test Report
GitLab allows you to view unit test results for a pipeline, giving you insight into the test execution for the pipeline.
Code Testing and Coverage

Failed test screenshots in test report
GitLab allows you to review screenshots captured during a failed test from the test report without digging through archives by hand.
Code Testing and Coverage

See unit test summaries in merge request widget
GitLab allows you to view unit test results from the merge request widget, giving you insight into quality impacts of your changes.
Review Apps
Gain access to a live instance of your application for every commit, allowing you and stakeholders to ensure thorough validation and collaboration before changes are merged into the main codebase.
Review Apps

Preview your changes with Review Apps
With GitLab CI/CD you can create a new environment for each one of your
branches, speeding up your development process. Spin up dynamic environments
for your merge requests with the ability to preview your branch in a live
environment. Review Apps support both static and dynamic URLs.
Review Apps

Environments Auto-stop
This feature allows users to configure an optional expiration date which can be set for review app environments.
Review Apps
Automated Accessibility scanning of Review Apps
Performing accessibility testing is important in order to ensure you're serving all the users who use your products. In GitLab you can generate Accessibility reports automatically prior to merging into master.
Review Apps

Comments in Review Apps
Shorten the feedback cycle and enable stakeholders to provide comments
through a form in your review app - which is then automatically added to the related merge request.
Pipeline Composition
Advanced features enable you to edit/compose a highly flexible CI/CD pipeline configuration to boost efficiency across a variety of projects.
Pipeline Composition
Instance file templates
Define custom LICENSE
, .gitignore
, Dockerfile
and .gitlab-ci.yml
templates for your GitLab instance to make consistency easier.
Pipeline Composition
Group file templates
Define custom LICENSE
, .gitignore
, Dockerfile
and .gitlab-ci.yml
templates for a Group to make consistency easier.
Pipeline Composition
Comprehensive pipeline graphs
Pipelines can be complex structures with many sequential and parallel jobs.
To make it a little easier to see what is going on, you can view a graph of
a single pipeline and its status.
Pipeline Composition
Downstream and Multi-project pipeline graphs
Visualize how pipelines across projects are linked together, including cross project dependencies.
Pipeline Composition
Automatic Retry for Failed CI Jobs
You can specify a retry keyword in your .gitlab-ci.yml file to make GitLab CI/CD
retry a job for a specific number of times before marking it as failed.
Pipeline Composition
Include external files in CI/CD pipeline definition
You can include external files in your pipeline definition file, using them
as templates to reuse snippets for common jobs.
Pipeline Composition
Run jobs only when there are changes to a file or path
Jobs can be configured to run only when there are changes to a specific
file or path, giving you control over execution to allow for more
complex build pipelines optimized for the changes in each commit.
Pipeline Composition
More efficient job execution flow
Use the needs
keyword to build relationships between jobs such that
execution is performed in the quickest possible manner. Set jobs to start
as soon as needed jobs complete, regardless of the stage configuration.
For example, you may have a specific tool or separate website that is
built as part of your main project. With needs
, you can specify the
relationship between these jobs and GitLab will then execute the jobs
as soon as possible instead of waiting for all earlier stages to complete.
Pipeline Composition
Run pipelines for merge requests
Configure pipelines to run in the context of merge requests.
This allows finer control over pipeline behavior, and also allows access to new
environment variables indicating the target branch and merge request ID when
relevant, offering opportunities for implementation of other more advanced behaviors.
Pipeline Composition
Explicit support for monorepos
The ability to execute jobs only/except when there are changes for a given path or file support monorepos where many microservices are contained in a single repo.
Pipeline Composition
Community powered workflows (configuration is code so are shareable)
GitLab pipeline (workflows) are defined as yml in repos and can be shared just like actions.
Pipeline Composition
Advanced CI/CD configuration linter
The CI linter provide warnings and error messages when validating your .gitlab-ci.yml
file, helping to get up and running quickly with GitLab pipelines.
Pipeline Composition
Multiple pipelines per repo
Ability to define multiple pipelines per code repository to enable either different processes to be run at different times, and/or to enable monorepos where there are multiple applications within one repo which need to be built and handled differently per application.
Pipeline Composition
Define cross-project jobs with artifact dependencies
Specify a job in your current project depends on the latest artifact produced by a job in another pipeline to easily set up cross-project pipelines that have artifact dependencies on each other.
Pipeline Composition

Define Parent-child pipelines
When one pipeline serves as a parent of one of more child pipelines, it removes many of the challenges of complex pipeline creation. Performance can be improved because child pipelines can run concurrently based on trigger configurations in the parent pipeline. As an added bonus, decomposing a single, complex, pipeline into a parent pipeline with multiple children simplifies pipeline visualization and ultimately improves comprehension for the entire team.
It is also possible to dynamically generate the .gitlab-ci.yml
for the child pipeline, making it easy to implement runtime behaviors in a clear way. GitLab includes a Jsonnet template as an example for how you can do this with a data templating language.
Pipeline Composition
Create parallel jobs via a matrix of targets
GitLab offers a matrix
keyword that works along with parallel
to handle creation of similar jobs for you, each with different sets of variables (i.e., a Cartesian product). As an example, you could now create a single job that knows you want a debug
and release
configuration for each of 4 different architectures, and it will automatically generate all these jobs for you at runtime.
Pipeline Composition
Multi project pipeline visualization
When you configure GitLab CI/CD for your project, you can visualize the stages of your jobs on a pipeline graph.
Pipeline Composition
CI/CD Catalog
Discoverability, Reusability and Ease of contribution for pipeline components
Pipeline Composition
CI/CD components
Reusable single pipeline configuration unit
Variables
CI/CD variables
You can define a CI/CD variable and reuse it as needed in the pipeline or job configuration. This feature simplifies your pipeline configuration and eliminates pipeline management issues caused by repeatedly used values getting out of sync.
Variables
Protected variables
You can mark a variable as "protected" to make it available only to jobs running on
protected branches, therefore only authorized users can get access to it.
Variables
Nested variable expansion
You can define a variable and use it in another variable definition within the same pipeline. This feature simplifies your pipeline definition and eliminates pipeline management issues caused by the duplicating of variable data.
Variables
Group-level variables
Define variables at the group level and use them in any project in the group.
GitLab Runner Core
GitLab Runner Operator for Kubernetes
The GitLab Runner Operator manages the lifecycle of GitLab Runner on Kubernetes clusters.
Fleet Visibility
Runner upgrade notification when managing runners
The ugprade status badge in your runners list allows you to identify at a glance which runners in your environment need updating.
Fleet Visibility
Summary of outdated runners metric
The ugprade status badge in your runners list allows you to identify at a glance which runners in your environment need updating.
Fleet Visibility
View statistics for runner performance
Displays the median estimated wait time for all instance runners.
Fleet Visibility
Runner Fleet Dashboard Admin View (Beta)
The Runner Fleet Dashboard - Admin View provides instance runner fleet metrics, including runner fleet health, most actively used runners, and the queue time for runners to measure performance of CI/CD jobs.
Fleet Visibility
Runner fleet dashboard for groups (Beta)
The runner fleet dashboard for groups provides runner fleet metrics for runners associated with a group and its subgroups. These metrics include runner fleet health, most actively used runners, runner usage breakdown, and the queue time for runners to measure the performance of CI/CD jobs.
GitLab Hosted Runners
GitLab hosted Runners are managed by GitLab and can be used to run CI/CD jobs on GitLab.com or GitLab Dedicated.
GitLab Hosted Runners
Hosted runners on Linux for GitLab.com
Hosted runners on Linux for GitLab.com, allow you to run your CI/CD jobs in a fully-isolated and on-demand virtual machine.
GitLab Hosted Runners
Hosted runners on Linux Arm for GitLab.com
Hosted runners on Linux Arm for GitLab.com, allow you to run your build and test workloads in a fully-isolated and on-demand virtual machine natively on the Arm architecture.
GitLab Hosted Runners
Hosted runners on Linux for GitLab.com - Larger machine types
Larger machine types of hosted runners on Linux for GitLab.com, allow you to run your heavy build and test workloads in a fully-isolated and on-demand virtual machine with up to 32 vCPUs and 128 GB RAM.
GitLab Hosted Runners
GPU-enabled hosted runners on Linux for GitLab.com
GPU-enabled hosted runners on Linux for GitLab.com allow you to run AI/ML or HPC workloads in a fully-isolated and on-demand virtual machine with 1 NVIDIA TESLA T4 attached.
GitLab Hosted Runners
Hosted runners on macOS for GitLab.com (Beta)
Hosted runners on macOS for GitLab.com enables you to natively build, test, and deploy applications for the Apple ecosystem.
GitLab Hosted Runners
Hosted runners on Windows for GitLab.com (Beta)
Hosted runners on Windows for GitLab.com enables you to run CI/CD jobs in ephemeral virtual machines, created specifically for the job.
GitLab Hosted Runners

Hosted runners on Linux for GitLab Dedicated
Hosted runners for GitLab Dedicated eliminate the need to maintain your own runner infrastructure.
They provide the same security, flexibility, and efficiency of GitLab Dedicated to runners.
You can use Linux hosted runners with fully-isolated, on-demand virtual machines with up to
32 vCPUs and 128 GB RAM.