Reputation: 6422
We are trying to create a good merge train setup in our institutional GitLab. Currently, we have a few jobs in our pipeline which run expensive fuzzy tests. These jobs should not run on every push, but they should run before a merge and it should be possible to activate them manually.
Currently these jobs are marked as manual for a generic pipeline.
fuzzy-tests:
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- if: >
$CI_COMMIT_TAG ||
$CI_COMMIT_BRANCH == 'main' ||
$CI_COMMIT_BRANCH == 'release/*' ||
$PUBLISH_DEV_VERSION
when: on_success
- when: manual
They should run automatically as part of a merge train pipeline, because when the merge train is going, we don't want to start the manual job. Is there a way to figure out as part of the rules
entry whether a job's context is a Merge Train Pipeline?
If not, is there a good way to ensure that fuzzy-tests
is run at least once before each merge, can be run on demand, and is not run on every change of the merge request?
Upvotes: 2
Views: 544
Reputation: 41119
They should run automatically as part of a merge train pipeline [...] Is there a way to figure out as part of the rules entry whether a job's context is a Merge Train Pipeline?
You can use the CI_MERGE_REQUEST_EVENT_TYPE
variable. Per the documentation, this variable contains:
The event type of the merge request. Can be
detached
,merged_result
ormerge_train
.
So, perhaps you setup your job rules, in relevant part, to use this variable like so:
fuzzy-tests:
rules:
- if: $CI_MERGE_REQUEST_EVENT_TYPE == "merge_train"
when: on_success
# ...
Keep in mind also that, on merge request pipelines, CI_COMMIT_BRANCH
won't be present. As noted in the documentation (emphasis added):
The commit branch name. Available in branch pipelines, including pipelines for the default branch. Not available in merge request pipelines or tag pipelines.
If you need to use a rule with compound clauses that depends on the branch/tag naming while also in a context other than a branch pipeline, you might consider using CI_COMMIT_REF_NAME
instead, which is available in more contexts, or more explicitly, CI_MERGE_REQUEST_SOURCE_BRANCH_NAME
in the case of merge requests.
Upvotes: 3