2020-04-08 14:13:33 +05:30
---
2020-06-23 00:09:42 +05:30
stage: Verify
2021-11-11 11:23:49 +05:30
group: Pipeline Authoring
2022-11-25 23:54:43 +05:30
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments
2020-04-08 14:13:33 +05:30
type: reference
---
2021-04-17 20:07:23 +05:30
# CI/CD pipelines **(FREE)**
2020-04-08 14:13:33 +05:30
2021-02-22 17:27:13 +05:30
NOTE:
2020-04-22 19:07:51 +05:30
Watch the
2020-04-08 14:13:33 +05:30
["Mastering continuous software development" ](https://about.gitlab.com/webcast/mastering-ci-cd/ )
2020-04-22 19:07:51 +05:30
webcast to see a comprehensive demo of a GitLab CI/CD pipeline.
2020-04-08 14:13:33 +05:30
Pipelines are the top-level component of continuous integration, delivery, and deployment.
Pipelines comprise:
2020-04-22 19:07:51 +05:30
- Jobs, which define *what* to do. For example, jobs that compile or test code.
- Stages, which define *when* to run the jobs. For example, stages that run tests after stages that compile the code.
2021-09-30 23:02:18 +05:30
Jobs are executed by [runners ](../runners/index.md ). Multiple jobs in the same stage are executed in parallel,
2020-04-22 19:07:51 +05:30
if there are enough concurrent runners.
If *all* jobs in a stage succeed, the pipeline moves on to the next stage.
If *any* job in a stage fails, the next stage is not (usually) executed and the pipeline ends early.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
In general, pipelines are executed automatically and require no intervention once created. However, there are
also times when you can manually interact with a pipeline.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
A typical pipeline might consist of four stages, executed in the following order:
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
- A `build` stage, with a job called `compile` .
- A `test` stage, with two jobs called `test1` and `test2` .
- A `staging` stage, with a job called `deploy-to-stage` .
- A `production` stage, with a job called `deploy-to-prod` .
2020-04-08 14:13:33 +05:30
2021-02-22 17:27:13 +05:30
NOTE:
2021-11-18 22:05:49 +05:30
If you have a [mirrored repository that GitLab pulls from ](../../user/project/repository/mirror/pull.md ),
2020-04-08 14:13:33 +05:30
you may need to enable pipeline triggering in your project's
2022-08-13 15:12:31 +05:30
**Settings > Repository > Mirroring repositories > Trigger pipelines for mirror updates**.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
## Types of pipelines
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
Pipelines can be configured in many different ways:
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
- [Basic pipelines ](pipeline_architectures.md#basic-pipelines ) run everything in each stage concurrently,
followed by the next stage.
- [Directed Acyclic Graph Pipeline (DAG) pipelines ](../directed_acyclic_graph/index.md ) are based on relationships
between jobs and can run more quickly than basic pipelines.
2022-04-04 11:22:00 +05:30
- [Merge request pipelines ](../pipelines/merge_request_pipelines.md ) run for merge
2020-04-22 19:07:51 +05:30
requests only (rather than for every commit).
2022-04-04 11:22:00 +05:30
- [Merged results pipelines ](../pipelines/merged_results_pipelines.md )
2020-04-22 19:07:51 +05:30
are merge request pipelines that act as though the changes from the source branch have
already been merged into the target branch.
2022-04-04 11:22:00 +05:30
- [Merge trains ](../pipelines/merge_trains.md )
use merged results pipelines to queue merges one after the other.
2022-10-11 01:57:18 +05:30
- [Parent-child pipelines ](downstream_pipelines.md#parent-child-pipelines ) break down complex pipelines
2022-03-02 08:16:31 +05:30
into one parent pipeline that can trigger multiple child sub-pipelines, which all
run in the same project and with the same SHA. This pipeline architecture is commonly used for mono-repos.
2022-10-11 01:57:18 +05:30
- [Multi-project pipelines ](downstream_pipelines.md#multi-project-pipelines ) combine pipelines for different projects together.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
## Configure a pipeline
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
Pipelines and their component jobs and stages are defined in the CI/CD pipeline configuration file for each project.
2020-04-08 14:13:33 +05:30
2021-01-29 00:20:46 +05:30
- [Jobs ](../jobs/index.md ) are the basic configuration component.
2021-09-30 23:02:18 +05:30
- Stages are defined by using the [`stages` ](../yaml/index.md#stages ) keyword.
2020-04-08 14:13:33 +05:30
2021-09-30 23:02:18 +05:30
For a list of configuration options in the CI pipeline file, see the [GitLab CI/CD Pipeline Configuration Reference ](../yaml/index.md ).
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
You can also configure specific aspects of your pipelines through the GitLab UI. For example:
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
- [Pipeline settings ](settings.md ) for each project.
- [Pipeline schedules ](schedules.md ).
2023-03-17 16:20:25 +05:30
- [Custom CI/CD variables ](../variables/index.md#for-a-project ).
2020-04-08 14:13:33 +05:30
2021-12-11 22:18:48 +05:30
### Ref specs for runners
2021-01-29 00:20:46 +05:30
When a runner picks a pipeline job, GitLab provides that job's metadata. This includes the [Git refspecs ](https://git-scm.com/book/en/v2/Git-Internals-The-Refspec ),
2023-01-13 00:05:48 +05:30
which indicate which ref (such as branch or tag) and commit (SHA1) are checked out from your
2021-01-29 00:20:46 +05:30
project repository.
This table lists the refspecs injected for each pipeline type:
| Pipeline type | Refspecs |
|--------------- |---------------------------------------- |
2021-12-11 22:18:48 +05:30
| pipeline for branches | `+<sha>:refs/pipelines/<id>` and `+refs/heads/<name>:refs/remotes/origin/<name>` |
| pipeline for tags | `+<sha>:refs/pipelines/<id>` and `+refs/tags/<name>:refs/tags/<name>` |
2022-04-04 11:22:00 +05:30
| [merge request pipeline ](../pipelines/merge_request_pipelines.md ) | `+<sha>:refs/pipelines/<id>` |
2021-01-29 00:20:46 +05:30
The refs `refs/heads/<name>` and `refs/tags/<name>` exist in your
project repository. GitLab generates the special ref `refs/pipelines/<id>` during a
running pipeline job. This ref can be created even after the associated branch or tag has been
2023-06-20 00:43:36 +05:30
deleted. It's therefore useful in some features such as [automatically stopping an environment ](../environments/index.md#stopping-an-environment ),
2021-09-30 23:02:18 +05:30
and [merge trains ](../pipelines/merge_trains.md )
2021-01-29 00:20:46 +05:30
that might run pipelines after branch deletion.
2020-04-22 19:07:51 +05:30
### View pipelines
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
You can find the current and historical pipeline runs under your project's
**CI/CD > Pipelines** page. You can also access pipelines for a merge request by navigating
to its **Pipelines** tab.
2020-04-08 14:13:33 +05:30
2020-05-24 23:13:21 +05:30
![Pipelines index page ](img/pipelines_index_v13_0.png )
2020-04-08 14:13:33 +05:30
2022-05-07 20:08:51 +05:30
Select a pipeline to open the **Pipeline Details** page and show
2020-04-22 19:07:51 +05:30
the jobs that were run for that pipeline. From here you can cancel a running pipeline,
retry jobs on a failed pipeline, or [delete a pipeline ](#delete-a-pipeline ).
2020-04-08 14:13:33 +05:30
2020-06-23 00:09:42 +05:30
[Starting in GitLab 12.3 ](https://gitlab.com/gitlab-org/gitlab-foss/-/issues/50499 ), a link to the
2020-04-22 19:07:51 +05:30
latest pipeline for the last commit of a given branch is available at `/project/pipelines/[branch]/latest` .
2020-10-24 23:57:45 +05:30
Also, `/project/pipelines/latest` redirects you to the latest pipeline for the last commit
2020-04-22 19:07:51 +05:30
on the project's default branch.
2020-04-08 14:13:33 +05:30
2020-05-24 23:13:21 +05:30
[Starting in GitLab 13.0 ](https://gitlab.com/gitlab-org/gitlab/-/issues/215367 ),
you can filter the pipeline list by:
- Trigger author
- Branch name
2021-01-03 14:25:43 +05:30
- Status ([GitLab 13.1 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/217617))
- Tag ([GitLab 13.1 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/217617))
2021-11-11 11:23:49 +05:30
- Source ([GitLab 14.3 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/338347))
2020-05-24 23:13:21 +05:30
2021-10-27 15:23:28 +05:30
[Starting in GitLab 14.2 ](https://gitlab.com/gitlab-org/gitlab/-/issues/26621 ), you can change the
pipeline column to display the pipeline ID or the pipeline IID.
2021-12-11 22:18:48 +05:30
If you use VS Code to edit your GitLab CI/CD configuration, the
[GitLab Workflow VS Code extension ](../../user/project/repository/vscode.md ) helps you
[validate your configuration ](https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#validate-gitlab-ci-configuration )
and [view your pipeline status ](https://marketplace.visualstudio.com/items?itemName=GitLab.gitlab-workflow#information-about-your-branch-pipelines-mr-closing-issue ).
2020-04-22 19:07:51 +05:30
### Run a pipeline manually
2020-04-08 14:13:33 +05:30
2021-09-30 23:02:18 +05:30
Pipelines can be manually executed, with predefined or manually-specified [variables ](../variables/index.md ).
2020-04-08 14:13:33 +05:30
2023-04-23 21:23:45 +05:30
You might do this if the results of a pipeline (for example, a code build) are required outside the standard
2020-04-22 19:07:51 +05:30
operation of the pipeline.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
To execute a pipeline manually:
2020-04-08 14:13:33 +05:30
2022-10-11 01:57:18 +05:30
1. On the top bar, select **Main menu > Projects** and find your project.
2021-10-27 15:23:28 +05:30
1. On the left sidebar, select **CI/CD > Pipelines** .
1. Select **Run pipeline** .
1. In the **Run for branch name or tag** field, select the branch or tag to run the pipeline for.
2023-04-23 21:23:45 +05:30
1. Enter any [CI/CD variables ](../variables/index.md ) required for the pipeline to run.
2021-10-27 15:23:28 +05:30
You can set specific variables to have their [values prefilled in the form ](#prefill-variables-in-manual-pipelines ).
1. Select **Run pipeline** .
2020-04-08 14:13:33 +05:30
2020-10-24 23:57:45 +05:30
The pipeline now executes the jobs as configured.
2020-04-08 14:13:33 +05:30
2021-03-11 19:13:27 +05:30
#### Prefill variables in manual pipelines
2021-11-18 22:05:49 +05:30
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/30101) in GitLab 13.7.
2021-03-11 19:13:27 +05:30
2022-11-25 23:54:43 +05:30
You can use the [`description` and `value` ](../yaml/index.md#variablesdescription )
2023-03-17 16:20:25 +05:30
keywords to [define pipeline-level (global) variables ](../variables/index.md#define-a-cicd-variable-in-the-gitlab-ciyml-file )
2022-11-25 23:54:43 +05:30
that are prefilled when running a pipeline manually. Use the description to explain
2023-01-13 00:05:48 +05:30
information such as what the variable is used for, and what the acceptable values are.
2021-03-11 19:13:27 +05:30
2022-11-25 23:54:43 +05:30
Job-level variables cannot be pre-filled.
2021-03-11 19:13:27 +05:30
2022-11-25 23:54:43 +05:30
In manually-triggered pipelines, the **Run pipeline** page displays all pipeline-level variables
2023-04-23 21:23:45 +05:30
that have a `description` defined in the `.gitlab-ci.yml` file. The description displays
2022-11-25 23:54:43 +05:30
below the variable.
2023-04-23 21:23:45 +05:30
You can change the prefilled value, which [overrides the value ](../variables/index.md#override-a-defined-cicd-variable ) for that single pipeline run.
Any variables overridden by using this process are [expanded ](../variables/index.md#prevent-cicd-variable-expansion )
and not [masked ](../variables/index.md#mask-a-cicd-variable ).
If you do not define a `value` for the variable in the configuration file, the variable name is still listed,
2022-11-25 23:54:43 +05:30
but the value field is blank.
For example:
2021-03-11 19:13:27 +05:30
```yaml
variables:
2023-04-23 21:23:45 +05:30
DEPLOY_CREDENTIALS:
description: "The deployment credentials."
2021-03-11 19:13:27 +05:30
DEPLOY_ENVIRONMENT:
2022-11-25 23:54:43 +05:30
description: "Select the deployment target. Valid options are: 'canary', 'staging', 'production', or a stable branch of your choice."
2023-04-23 21:23:45 +05:30
value: "canary"
2021-03-11 19:13:27 +05:30
```
2022-11-25 23:54:43 +05:30
In this example:
2023-04-23 21:23:45 +05:30
- `DEPLOY_CREDENTIALS` is listed in the **Run pipeline** page, but with no value set.
2022-11-25 23:54:43 +05:30
The user is expected to define the value each time the pipeline is run manually.
2023-04-23 21:23:45 +05:30
- `DEPLOY_ENVIRONMENT` is pre-filled in the **Run pipeline** page with `canary` as the default value,
and the message explains the other options.
2021-09-04 01:27:46 +05:30
2023-04-23 21:23:45 +05:30
#### Configure a list of selectable prefilled variable values
2023-03-04 22:38:38 +05:30
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/363660) in GitLab 15.5 [with a flag](../../administration/feature_flags.md) named `run_pipeline_graphql`. Disabled by default.
> - The `options` keyword was [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/105502) in GitLab 15.7.
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106038) in GitLab 15.7. Feature flag `run_pipeline_graphql` removed.
2023-07-09 08:55:56 +05:30
> - The variables list sometimes did not populate correctly due to [a bug](https://gitlab.com/gitlab-org/gitlab/-/issues/386245), which was resolved in GitLab 15.9.
2023-03-04 22:38:38 +05:30
You can define an array of CI/CD variable values the user can select from when running a pipeline manually.
These values are in a dropdown list in the **Run pipeline** page. Add the list of
value options to `options` and set the default value with `value` . The string in `value`
must also be included in the `options` list.
For example:
```yaml
variables:
DEPLOY_ENVIRONMENT:
value: "staging"
options:
- "production"
- "staging"
- "canary"
description: "The deployment target. Set to 'staging' by default."
```
2020-04-22 19:07:51 +05:30
### Run a pipeline by using a URL query string
2020-04-08 14:13:33 +05:30
2020-06-23 00:09:42 +05:30
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/24146) in GitLab 12.5.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
You can use a query string to pre-populate the **Run Pipeline** page. For example, the query string
2020-10-24 23:57:45 +05:30
`.../pipelines/new?ref=my_branch&var[foo]=bar&file_var[file_foo]=file_bar` pre-populates the
2020-04-22 19:07:51 +05:30
**Run Pipeline** page with:
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
- **Run for** field: `my_branch` .
- **Variables** section:
- Variable:
- Key: `foo`
- Value: `bar`
- File:
- Key: `file_foo`
- Value: `file_bar`
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
The format of the `pipelines/new` URL is:
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
```plaintext
.../pipelines/new?ref=< branch > & var[< variable_key > ]=< value > & file_var[< file_key > ]=< value >
```
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
The following parameters are supported:
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
- `ref` : specify the branch to populate the **Run for** field with.
- `var` : specify a `Variable` variable.
- `file_var` : specify a `File` variable.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
For each `var` or `file_var` , a key and value are required.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
### Add manual interaction to your pipeline
2020-04-08 14:13:33 +05:30
2021-10-27 15:23:28 +05:30
[Manual jobs ](../jobs/job_control.md#create-a-job-that-must-be-run-manually ),
2020-04-22 19:07:51 +05:30
allow you to require manual interaction before moving forward in the pipeline.
2020-04-08 14:13:33 +05:30
2022-05-07 20:08:51 +05:30
You can do this straight from the pipeline graph. Just select the play button
2020-04-22 19:07:51 +05:30
to execute that particular job.
2020-04-08 14:13:33 +05:30
2021-11-11 11:23:49 +05:30
For example, your pipeline can start automatically, but require a manual action to
[deploy to production ](../environments/index.md#configure-manual-deployments ).
In the example below, the `production` stage has a job with a manual action:
2020-04-08 14:13:33 +05:30
2021-11-11 11:23:49 +05:30
![Pipelines example ](img/manual_pipeline_v14_2.png )
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
#### Start multiple manual actions in a stage
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/27188) in GitLab 11.11.
2020-04-08 14:13:33 +05:30
2022-05-07 20:08:51 +05:30
Multiple manual actions in a single stage can be started at the same time using the "Play all manual"
After you select this action, each individual manual action is triggered and refreshed
2020-04-22 19:07:51 +05:30
to an updated status.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
This functionality is only available:
2020-04-08 14:13:33 +05:30
2021-09-30 23:02:18 +05:30
- For users with at least the Developer role.
2020-04-22 19:07:51 +05:30
- If the stage contains [manual actions ](#add-manual-interaction-to-your-pipeline ).
2020-04-08 14:13:33 +05:30
2021-12-11 22:18:48 +05:30
### Skip a pipeline
To push a commit without triggering a pipeline, add `[ci skip]` or `[skip ci]` , using any
capitalization, to your commit message.
Alternatively, if you are using Git 2.10 or later, use the `ci.skip` [Git push option ](../../user/project/push_options.md#push-options-for-gitlab-cicd ).
The `ci.skip` push option does not skip merge request
pipelines.
2020-04-22 19:07:51 +05:30
### Delete a pipeline
2020-04-08 14:13:33 +05:30
2020-06-23 00:09:42 +05:30
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/24851) in GitLab 12.7.
2020-04-08 14:13:33 +05:30
2022-04-04 11:22:00 +05:30
Users with the Owner role for a project can delete a pipeline
2023-01-13 00:05:48 +05:30
by selecting the pipeline in the **CI/CD > Pipelines** to get to the **Pipeline Details**
2022-05-07 20:08:51 +05:30
page, then selecting **Delete** .
2020-04-08 14:13:33 +05:30
2022-05-07 20:08:51 +05:30
![Pipeline Delete ](img/pipeline-delete.png )
2020-04-08 14:13:33 +05:30
2022-07-23 23:45:48 +05:30
Deleting a pipeline does not automatically delete its
2022-10-11 01:57:18 +05:30
[child pipelines ](downstream_pipelines.md#parent-child-pipelines ).
2022-07-23 23:45:48 +05:30
See the [related issue ](https://gitlab.com/gitlab-org/gitlab/-/issues/39503 )
for details.
2021-02-22 17:27:13 +05:30
WARNING:
2022-07-23 23:45:48 +05:30
Deleting a pipeline expires all pipeline caches, and deletes all immediately
related objects, such as builds, logs, artifacts, and triggers.
**This action cannot be undone.**
2020-04-08 14:13:33 +05:30
2022-03-02 08:16:31 +05:30
### Pipeline security on protected branches
A strict security model is enforced when pipelines are executed on
[protected branches ](../../user/project/protected_branches.md ).
The following actions are allowed on protected branches only if the user is
[allowed to merge or push ](../../user/project/protected_branches.md )
on that specific branch:
- Run manual pipelines (using the [Web UI ](#run-a-pipeline-manually ) or [pipelines API ](#pipelines-api )).
- Run scheduled pipelines.
- Run pipelines using triggers.
- Run on-demand DAST scan.
- Trigger manual actions on existing pipelines.
- Retry or cancel existing jobs (using the Web UI or pipelines API).
2020-04-08 14:13:33 +05:30
2022-03-02 08:16:31 +05:30
**Variables** marked as **protected** are accessible only to jobs that
run on protected branches, preventing untrusted users getting unintended access to
sensitive information like deployment credentials and tokens.
2020-04-08 14:13:33 +05:30
2022-03-02 08:16:31 +05:30
**Runners** marked as **protected** can run jobs only on protected
branches, preventing untrusted code from executing on the protected runner and
preserving deployment keys and other credentials from being unintentionally
2022-05-07 20:08:51 +05:30
accessed. To ensure that jobs intended to be executed on protected
2022-03-02 08:16:31 +05:30
runners do not use regular runners, they must be tagged accordingly.
2020-04-08 14:13:33 +05:30
2023-01-13 00:05:48 +05:30
Review the [deployment safety ](../environments/deployment_safety.md )
page for additional security recommendations for securing your pipelines.
2022-10-11 01:57:18 +05:30
## Trigger a pipeline when an upstream project is rebuilt **(PREMIUM)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/9045) in GitLab 12.8.
You can trigger a pipeline in your project whenever a pipeline finishes for a new
tag in a different project.
Prerequisites:
- The upstream project must be [public ](../../user/public_access.md ).
- The user must have the Developer role
in the upstream project.
To trigger the pipeline when the upstream project is rebuilt:
1. On the top bar, select **Main menu > Projects** and find your project.
1. On the left sidebar, select **Settings > CI/CD** .
1. Expand **Pipeline subscriptions** .
1. Enter the project you want to subscribe to, in the format `<namespace>/<project>` .
For example, if the project is `https://gitlab.com/gitlab-org/gitlab` , use `gitlab-org/gitlab` .
1. Select **Subscribe** .
Any pipelines that complete successfully for new tags in the subscribed project
now trigger a pipeline on the current project's default branch. The maximum
number of upstream pipeline subscriptions is 2 by default, for both the upstream and
downstream projects. On self-managed instances, an administrator can change this
[limit ](../../administration/instance_limits.md#number-of-cicd-subscriptions-to-a-project ).
2022-03-02 08:16:31 +05:30
### How pipeline duration is calculated
2020-04-08 14:13:33 +05:30
Total running time for a given pipeline excludes retries and pending
(queued) time.
Each job is represented as a `Period` , which consists of:
- `Period#first` (when the job started).
- `Period#last` (when the job finished).
A simple example is:
- A (1, 3)
- B (2, 4)
- C (6, 7)
In the example:
- A begins at 1 and ends at 3.
- B begins at 2 and ends at 4.
- C begins at 6 and ends at 7.
Visually, it can be viewed as:
2020-05-24 23:13:21 +05:30
```plaintext
2020-04-08 14:13:33 +05:30
0 1 2 3 4 5 6 7
AAAAAAA
BBBBBBB
CCCC
```
The union of A, B, and C is (1, 4) and (6, 7). Therefore, the total running time is:
2020-05-24 23:13:21 +05:30
```plaintext
2020-04-08 14:13:33 +05:30
(4 - 1) + (7 - 6) => 4
```
2020-04-22 19:07:51 +05:30
## Visualize pipelines
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
Pipelines can be complex structures with many sequential and parallel jobs.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
To make it easier to understand the flow of a pipeline, GitLab has pipeline graphs for viewing pipelines
and their statuses.
2020-04-08 14:13:33 +05:30
2021-06-08 01:23:25 +05:30
Pipeline graphs can be displayed as a large graph or a miniature representation, depending on the page you
2020-04-22 19:07:51 +05:30
access the graph from.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
GitLab capitalizes the stages' names in the pipeline graphs.
2020-04-08 14:13:33 +05:30
2021-06-08 01:23:25 +05:30
### View full pipeline graph
2020-04-22 19:07:51 +05:30
2022-08-13 15:12:31 +05:30
> Visualization improvements [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/276949) in GitLab 13.11.
2021-04-29 21:17:54 +05:30
2021-06-08 01:23:25 +05:30
The [pipeline details page ](#view-pipelines ) displays the full pipeline graph of
all the jobs in the pipeline.
2020-04-08 14:13:33 +05:30
2021-06-08 01:23:25 +05:30
You can group the jobs by:
2021-11-11 11:23:49 +05:30
- Stage, which arranges jobs in the same stage together in the same column:
2021-06-08 01:23:25 +05:30
2021-11-11 11:23:49 +05:30
![jobs grouped by stage ](img/pipelines_graph_stage_view_v14_2.png )
2021-06-08 01:23:25 +05:30
- [Job dependencies ](#view-job-dependencies-in-the-pipeline-graph ), which arranges
2021-09-30 23:02:18 +05:30
jobs based on their [`needs` ](../yaml/index.md#needs ) dependencies.
2020-04-08 14:13:33 +05:30
2023-05-27 22:25:52 +05:30
Multi-project pipeline graphs help you visualize the entire pipeline, including all cross-project inter-dependencies.
2020-04-08 14:13:33 +05:30
2022-05-07 20:08:51 +05:30
If a stage contains more than 100 jobs, only the first 100 jobs are listed in the
2023-04-23 21:23:45 +05:30
pipeline graph. The remaining jobs still run as usual. To see the jobs:
2022-05-07 20:08:51 +05:30
- Select the pipeline, and the jobs are listed on the right side of the pipeline details page.
- On the left sidebar, select **CI/CD > Jobs** .
2021-06-08 01:23:25 +05:30
### View job dependencies in the pipeline graph
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/298973) in GitLab 13.12.
2021-11-11 11:23:49 +05:30
> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/328538) in GitLab 14.0.
2021-10-27 15:23:28 +05:30
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/328538) in GitLab 14.2.
2021-06-08 01:23:25 +05:30
2022-10-11 01:57:18 +05:30
To arrange jobs in the pipeline graph based on their [`needs` ](../yaml/index.md#needs )
dependencies, select **Job dependencies** in the **Group jobs by** section. This option
is available for pipelines with 3 or more jobs with `needs` job dependencies.
2021-06-08 01:23:25 +05:30
Jobs in the leftmost column run first, and jobs that depend on them are grouped in the next columns.
2021-11-11 11:23:49 +05:30
For example, `test-job1` depends only on jobs in the first column, so it displays
in the second column from the left. `deploy-job1` depends on jobs in both the first
2021-06-08 01:23:25 +05:30
and second column and displays in the third column:
![jobs grouped by needs dependency ](img/pipelines_graph_dependency_view_v13_12.png )
To add lines that show the `needs` relationships between jobs, select the **Show dependencies** toggle.
These lines are similar to the [needs visualization ](../directed_acyclic_graph/index.md#needs-visualization ):
![jobs grouped by needs dependency with lines displayed ](img/pipelines_graph_dependency_view_links_v13_12.png )
To see the full `needs` dependency tree for a job, hover over it:
![single job dependency tree highlighted ](img/pipelines_graph_dependency_view_hover_v13_12.png )
2020-04-22 19:07:51 +05:30
### Pipeline mini graphs
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
Pipeline mini graphs take less space and can tell you at a
quick glance if all jobs passed or something failed. The pipeline mini graph can
2021-10-27 15:23:28 +05:30
be found when you go to:
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
- The pipelines index page.
- A single commit page.
- A merge request page.
2021-12-11 22:18:48 +05:30
- The [pipeline editor ](../pipeline_editor/index.md ), [in GitLab 14.5 ](https://gitlab.com/gitlab-org/gitlab/-/issues/337514 ) and later.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
Pipeline mini graphs allow you to see all related jobs for a single commit and the net result
of each stage of your pipeline. This allows you to quickly see what failed and
fix it.
2020-04-08 14:13:33 +05:30
2021-06-08 01:23:25 +05:30
Pipeline mini graphs only display jobs by stage.
2022-05-07 20:08:51 +05:30
Stages in pipeline mini graphs are expandable. Hover your mouse over each stage to see the name and status, and select a stage to expand its jobs list.
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
| Mini graph | Mini graph expanded |
|:-------------------------------------------------------------|:---------------------------------------------------------------|
| ![Pipelines mini graph ](img/pipelines_mini_graph_simple.png ) | ![Pipelines mini graph extended ](img/pipelines_mini_graph.png ) |
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
### Pipeline success and duration charts
2020-04-08 14:13:33 +05:30
2021-03-08 18:12:59 +05:30
Pipeline analytics are available on the [**CI/CD Analytics** page ](../../user/analytics/ci_cd_analytics.md#pipeline-success-and-duration-charts ).
2020-04-08 14:13:33 +05:30
2020-04-22 19:07:51 +05:30
### Pipeline badges
Pipeline status and test coverage report badges are available and configurable for each project.
For information on adding pipeline badges to projects, see [Pipeline badges ](settings.md#pipeline-badges ).
## Pipelines API
2020-04-08 14:13:33 +05:30
GitLab provides API endpoints to:
- Perform basic functions. For more information, see [Pipelines API ](../../api/pipelines.md ).
- Maintain pipeline schedules. For more information, see [Pipeline schedules API ](../../api/pipeline_schedules.md ).
- Trigger pipeline runs. For more information, see:
2021-09-30 23:02:18 +05:30
- [Triggering pipelines through the API ](../triggers/index.md ).
2020-04-08 14:13:33 +05:30
- [Pipeline triggers API ](../../api/pipeline_triggers.md ).