Commit 5252b9b3 authored by Marcel Amirault's avatar Marcel Amirault Committed by Suzanne Selhorn

CTRT cleanup of merged results pipelines doc

REmove all the info that's duplicated on the MR pipelines
and merge trains page. Move merge train details to merge
trains page. Simplify language as much as possible, and
make sure the page follows current style guide for navigation
and content types. Also adds a header to the feature flags
admin page so that we can link to that section.
parent c9faf2ba
...@@ -130,16 +130,17 @@ irb(main):001:0> Feature.enable(:my_awesome_feature) ...@@ -130,16 +130,17 @@ irb(main):001:0> Feature.enable(:my_awesome_feature)
=> nil => nil
``` ```
To check if a flag is enabled or disabled you can use `Feature.enabled?` or `Feature.disabled?`. For example, for a fictional feature flag named `my_awesome_feature`: When the feature is ready, GitLab removes the feature flag, and the option for
enabling and disabling it no longer exists. The feature becomes available in all instances.
### Check if a feature flag is enabled
To check if a flag is enabled or disabled, use `Feature.enabled?` or `Feature.disabled?`.
For example, for a feature flag named `my_awesome_feature` that is already enabled:
```ruby ```ruby
Feature.enable(:my_awesome_feature)
=> nil
Feature.enabled?(:my_awesome_feature) Feature.enabled?(:my_awesome_feature)
=> true => true
Feature.disabled?(:my_awesome_feature) Feature.disabled?(:my_awesome_feature)
=> false => false
``` ```
When the feature is ready, GitLab removes the feature flag, and the option for
enabling and disabling it no longer exists. The feature becomes available in all instances.
...@@ -145,8 +145,22 @@ This is the fastest option to get the change merged into the target branch. ...@@ -145,8 +145,22 @@ This is the fastest option to get the change merged into the target branch.
![Merge Immediately](img/merge_train_immediate_merge_v12_6.png) ![Merge Immediately](img/merge_train_immediate_merge_v12_6.png)
WARNING: WARNING:
Each time you merge a merge request immediately, the current merge train Each time you merge a merge request immediately, the current merge train is recreated,
is recreated and all pipelines restart. all pipelines restart, and [redundant pipelines are cancelled](#automatic-pipeline-cancellation).
### Automatic pipeline cancellation
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12996) in GitLab 12.3.
GitLab CI/CD can detect the presence of redundant pipelines, and cancels them
to conserve CI resources.
When a user merges a merge request immediately in an ongoing merge
train, the train is reconstructed, because it recreates the expected
post-merge commit and pipeline. In this case, the merge train may already
have pipelines running against the previous expected post-merge commit.
These pipelines are considered redundant and are automatically
canceled.
## Troubleshooting ## Troubleshooting
......
...@@ -6,128 +6,71 @@ info: To determine the technical writer assigned to the Stage/Group associated w ...@@ -6,128 +6,71 @@ info: To determine the technical writer assigned to the Stage/Group associated w
# Pipelines for merged results **(PREMIUM)** # Pipelines for merged results **(PREMIUM)**
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/7380) in GitLab 11.10. A *pipeline for merged results* is a type of [pipeline for merge requests](merge_request_pipelines.md). It is a pipeline that runs against the results of the source and target branches merged together.
When you submit a merge request, you are requesting to merge changes from a GitLab creates an internal commit with the merged results, so the pipeline can run
source branch into a target branch. By default, the CI pipeline runs jobs against it. This commit does not exist in either branch,
against the source branch. but you can view it in the pipeline details.
With *pipelines for merged results*, the pipeline runs as if the changes from The pipeline runs against the target branch as it exists at the moment you run the pipeline.
the source branch have already been merged into the target branch. The commit shown for the pipeline does not exist on the source or target branches but represents the combined target and source branches. Over time, while you're working in the source branch, the target branch might change.
Any time you want to be sure the merged results are accurate, you should re-run the pipeline.
![Merge request widget for merged results pipeline](img/merged_result_pipeline.png) Pipelines for merged results can't run when:
If the pipeline fails due to a problem in the target branch, you can wait until the
target is fixed and re-run the pipeline.
This new pipeline runs as if the source is merged with the updated target, and you
don't need to rebase.
The pipeline does not automatically run when the target branch changes. Only changes
to the source branch trigger a new pipeline. If a long time has passed since the last successful
pipeline, you may want to re-run it before merge, to ensure that the source changes
can still be successfully merged into the target.
When the merge request can't be merged, the pipeline runs against the source branch only. For example, when:
- The target branch has changes that conflict with the changes in the source branch. - The target branch has changes that conflict with the changes in the source branch.
- The merge request is a [**Draft** merge request](../../user/project/merge_requests/drafts.md). - The merge request is a [**Draft** merge request](../../user/project/merge_requests/drafts.md).
In these cases, the pipeline runs as a [pipeline for merge requests](merge_request_pipelines.md) In these cases, the pipeline runs as a [pipeline for merge requests](merge_request_pipelines.md)
and is labeled as `detached`. If these cases no longer exist, new pipelines and is labeled as `detached`.
again run against the merged results.
Any user who has developer [permissions](../../user/permissions.md) can run a
pipeline for merged results.
## Prerequisites ## Prerequisites
To enable pipelines for merge results: To use pipelines for merged results:
- You must have the [Maintainer role](../../user/permissions.md). - Your project's [CI/CD configuration file](../yaml/index.md) must be configured to
- You must be using [GitLab Runner](https://gitlab.com/gitlab-org/gitlab-runner) 11.9 or later. [run jobs in pipelines for merge requests](merge_request_pipelines.md#prerequisites).
- You must not be using
[fast forward merges](../../user/project/merge_requests/fast_forward_merge.md) yet.
To follow progress, see [#26996](https://gitlab.com/gitlab-org/gitlab/-/issues/26996).
- Your repository must be a GitLab repository, not an - Your repository must be a GitLab repository, not an
[external repository](../ci_cd_for_external_repos/index.md). [external repository](../ci_cd_for_external_repos/index.md).
- You must not be using [fast forward merges](../../user/project/merge_requests/fast_forward_merge.md).
[An issue exits](https://gitlab.com/gitlab-org/gitlab/-/issues/26996) to change this behavior.
## Enable pipelines for merged results ## Enable pipelines for merged results
To enable pipelines for merged results for your project: To enable pipelines for merged results in a project, you must have at least the
[Maintainer role](../../user/permissions.md):
1. [Configure your CI/CD configuration file](merge_request_pipelines.md#prerequisites) 1. On the top bar, select **Menu > Projects** and find your project.
so that the pipeline or individual jobs run for merge requests. 1. On the left sidebar, select **Settings > General**.
1. Visit your project's **Settings > General** and expand **Merge requests**. 1. Expand **Merge requests**.
1. Check **Enable merged results pipelines**. 1. Select **Enable merged results pipelines**.
1. Click **Save changes**. 1. Select **Save changes**.
WARNING: WARNING:
If you select the checkbox but don't configure your CI/CD to use If you select the checkbox but don't configure your pipeline to use
pipelines for merge requests, your merge requests may become stuck in an pipelines for merge requests, your merge requests may become stuck in an
unresolved state or your pipelines may be dropped. unresolved state or your pipelines may be dropped.
## Using Merge Trains
When you enable [Pipelines for merged results](#pipelines-for-merged-results),
GitLab [automatically displays](merge_trains.md#add-a-merge-request-to-a-merge-train)
a **Start/Add Merge Train button**.
Generally, this is a safer option than merging merge requests immediately, because your
merge request is evaluated with an expected post-merge result before the actual
merge happens.
For more information, read the [documentation on Merge Trains](merge_trains.md).
## Automatic pipeline cancellation
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12996) in GitLab 12.3.
GitLab CI/CD can detect the presence of redundant pipelines, and cancels them
to conserve CI resources.
When a user merges a merge request immediately in an ongoing merge
train, the train is reconstructed, because it recreates the expected
post-merge commit and pipeline. In this case, the merge train may already
have pipelines running against the previous expected post-merge commit.
These pipelines are considered redundant and are automatically
canceled.
## Troubleshooting ## Troubleshooting
### Pipelines for merged results not created even with new change pushed to merge request ### Pipelines for merged results are not created
Can be caused by some disabled feature flags. Please make sure that
the following feature flags are enabled on your GitLab instance:
- `:merge_ref_auto_sync`
To check and set these feature flag values, please ask an administrator to:
1. Log into the Rails console of the GitLab instance:
```shell
sudo gitlab-rails console
```
1. Check if the flags are enabled or not:
```ruby
Feature.enabled?(:merge_ref_auto_sync)
```
1. If needed, enable the feature flags: In GitLab 13.7 and earlier, pipelines for merged results might not be created due
to a disabled [feature flag](../../user/feature_flags.md). This feature flag
[was removed](https://gitlab.com/gitlab-org/gitlab/-/issues/299115) in GitLab 13.8.
Upgrade to 13.8 or later, or make sure the `:merge_ref_auto_sync`
[feature flag is enabled](../../administration/feature_flags.md#check-if-a-feature-flag-is-enabled)
on your GitLab instance.
```ruby ### Pipelines fail intermittently with a `fatal: reference is not a tree:` error
Feature.enable(:merge_ref_auto_sync)
```
### Intermittently pipelines fail by `fatal: reference is not a tree:` error Pipelines for merged results run on a merge ref for a merge request
(`refs/merge-requests/<iid>/merge`), so the Git reference could be overwritten at an
unexpected time.
Since pipelines for merged results are a run on a merge ref of a merge request For example, when a source or target branch is advanced, the pipeline fails with
(`refs/merge-requests/<iid>/merge`), the Git reference could be overwritten at an the `fatal: reference is not a tree:` error, which indicates that the checkout-SHA
unexpected timing. For example, when a source or target branch is advanced. is not found in the merge ref.
In this case, the pipeline fails because of `fatal: reference is not a tree:` error,
which indicates that the checkout-SHA is not found in the merge ref.
This behavior was improved at GitLab 12.4 by introducing [Persistent pipeline refs](../troubleshooting.md#fatal-reference-is-not-a-tree-error). This behavior was improved in GitLab 12.4 by introducing [persistent pipeline refs](../troubleshooting.md#fatal-reference-is-not-a-tree-error).
You should be able to create pipelines at any timings without concerning the error. Upgrade to GitLab 12.4 or later to resolve the problem.
...@@ -174,7 +174,7 @@ a branch to its remote repository. To illustrate the problem, suppose you've had ...@@ -174,7 +174,7 @@ a branch to its remote repository. To illustrate the problem, suppose you've had
This occurs because the previous pipeline cannot find a checkout-SHA (which is associated with the pipeline record) This occurs because the previous pipeline cannot find a checkout-SHA (which is associated with the pipeline record)
from the `example` branch that the commit history has already been overwritten by the force-push. from the `example` branch that the commit history has already been overwritten by the force-push.
Similarly, [Pipelines for merged results](pipelines/pipelines_for_merged_results.md) Similarly, [Pipelines for merged results](pipelines/pipelines_for_merged_results.md)
might have failed intermittently due to [the same reason](pipelines/pipelines_for_merged_results.md#intermittently-pipelines-fail-by-fatal-reference-is-not-a-tree-error). might have failed intermittently due to [the same reason](pipelines/pipelines_for_merged_results.md#pipelines-fail-intermittently-with-a-fatal-reference-is-not-a-tree-error).
As of GitLab 12.4, we've improved this behavior by persisting pipeline refs exclusively. As of GitLab 12.4, we've improved this behavior by persisting pipeline refs exclusively.
To illustrate its life cycle: To illustrate its life cycle:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment