在我的管道中,我希望仅当合并请求目标分支是某个分支时才运行作业,例如release/1.0.0-rc或release/1.5.0-rc等。
这是我的工作:
build-composer:
stage: build-app
image:
name: $PHP_IMAGE
entrypoint: [""]
script:
- composer install
artifacts:
paths:
- vendor/
expire_in: 1h
rules:
- if: '$CI_COMMIT_BRANCH == "dev" && $CI_COMMIT_TAG == null'
when: always
- if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == "dev" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME =~ /^release\/.*$/ && $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_STATE == "merged"'
when: always
- if: '$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ /^feature\/.*$/ && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "dev" && $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_STATE == "merged"'
when: always
尝试将来自 feature/* 分支的请求合并到 dev 成功触发管道在合并后运行。但是,从 dev 分支合并到release/1.0.0-rc 时,不会触发任何管道。
我也尝试过将
=~ /^release\/.*$/
更改为 == "release/**"
,但没有成功。
这是因为执行
merge
事件不会触发 MR 管道,正如 docs 所解释的那样:
这种类型的管道称为合并请求管道,在以下情况下运行:
- 从具有一次或多次提交的源分支创建新的合并请求。
- 将新提交推送到源分支以进行合并请求。
- 转到合并请求中的“管道”选项卡,然后选择“运行管道”。
合并时,触发的事件是
commit
到 target branch
。在第一个场景中,由于规则 dev
,它与
if: '$CI_COMMIT_BRANCH == "dev" && $CI_COMMIT_TAG == null'
分支一起工作
您正在寻找的是
merged results pipelines
,请查看 docs 了解如何设置这些内容。