在GitLab CI中,Merge Request Rules用于指定何时应该创建或合并请求。有三种不同的规则类型:rules、changes、和workflow。
这种规则类型根据条件创建或合并请求。它可以使用if和when关键字来指定规则。
示例:
merge_job:
script:
- echo "Merging changes into master"
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME == "feature-branch"'
when: manual
上面的代码片段表示,当从“feature-branch”创建合并请求时,应该手动合并。换句话说,它不会自动合并。
这种规则类型只有在发生变化时才会触发。它可以使用changes关键字和file匹配模式列表来指定条件。
示例:
test_job:
script:
- echo "Running unit tests"
rules:
- changes:
- "*.py"
上面的代码表示,当.py文件发生变化时,应该运行“test_job”任务。如果其他非Python文件发生变化,则不会运行该任务。
这种规则类型指定在Pipeline中的哪个阶段应该创建或合并请求。它使用workflow关键字和阶段列表来指定条件。
示例:
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "master"'
when: always
allow_failure: false
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: manual
上面的代码表示,在CI Pipeline中有两个规则。第一个规则指定,在“master”分支上的代码提交时始终自动合并。第二个规则表示,当在分支之间创建合并