debian-mirror-gitlab/doc/ci/pipelines/index.md

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

502 lines
22 KiB
Markdown
Raw Normal View History

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).