我有一个项目,很多人协作,我们有一个简短的工作流程,我们希望在拉到分叉分支时随时在每个分支中进行测试,如果我们向“中央”发出合并请求,我们希望测试更长的测试存储库。
目前测试的简短版本运行良好,在我们想要的地方,它看起来像这样:
workflow:
rules:
# here the order matter!
# does not run with changes in .md files
- if: '$CI_COMMIT_BRANCH && $CI_COMMIT_BEFORE_SHA !~ /0{40}/'
changes:
- "{*[^.]md*,*.[^m]*,*.m,*.m[^d]*,*.md?*,*[^d]}"
# does not run when creating tags
- if: $CI_COMMIT_TAG
when: never
# does not run if branches start with test_
- if: $CI_COMMIT_BRANCH =~ /test_/
when: never
# it runs with any branch
- if: $CI_COMMIT_BRANCH
stages:
- build
- test
- plot
....
analysis-test-job:
stage: test
script:
- source run_shorttest.sh
analysis-longtest-job:
stage: test
script:
- source run_longtest.sh
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"'
这在我们的个人和中央存储库中运行良好,但
analysis-longtest-job
永远不会运行。
为了明确起见,我想要的是
analysis-longtest-job
仅在我们向“中央”存储库的主分支发出合并请求并且在每个分支中通过短工作流之后才运行。
知道我做错了什么吗?
非常感谢您的帮助。
您的
workflow:rules:
正在阻止合并请求管道运行。因此,$CI_PIPELINE_SOURCE
永远不可能是merge_request_event
,因为这样的管道在您拥有它们时被workflow:rules:
排除在外。具体来说,请注意,预定义变量CI_COMMIT_BRANCH
仅存在于分支管道上,而不存在于合并请求管道或标记管道上。另请参阅:if
的常见
workflow:rules:
子句。
要解决此问题,请确保您的
workflow:rules:
允许合并请求管道。
workflow:
rules:
# ...
# allow branch pipelines
- if: $CI_COMMIT_BRANCH
# allow merge request pipelines to run
- if: $CI_PIPELINE_SOURCE == "merge_request_event"