GitLab CI中include规则执行异常问题咨询
GitLab CI 流水线配置问题排查
配置文件详情
.gitlab-ci.yml
stages: - build include: - local: ci/merge-request.gitlab-ci.yml rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" || ($CI_PIPELINE_SOURCE == "push" && $CI_OPEN_MERGE_REQUESTS) - local: ci/default-branch.gitlab-ci.yml rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH merge-request-direct: stage: build script: - echo "merge-request-direct" rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" || ($CI_PIPELINE_SOURCE == "push" && $CI_OPEN_MERGE_REQUESTS)
ci/merge-request.gitlab-ci.yml
merge-request-included: stage: build script: - echo "merge-request-included"
ci/default-ranch.gitlab-ci.yml(文件名存在拼写错误)
default-branch: stage: build script: - echo "default-branch"
实际执行表现
- 推送或合并内容至
CI_DEFAULT_BRANCH分支时,仅default-branch任务执行,符合预期; - 推送内容至其他分支时,无任务执行,符合预期;
- 创建合并请求时,仅
merge-request-direct任务执行,不符合预期,merge-request-included任务未按预期运行; - 推送更新合并请求分支时,会运行两条流水线:
- 分支推送流水线:
merge-request-direct与merge-request-included任务均执行,符合预期; - 合并请求流水线:仅
merge-request-direct任务执行,不符合预期,上述两个任务均应运行。
- 分支推送流水线:
问题原因与解决方法
问题原因
merge-request-included作业未配置运行规则,在GitLab CI中,未设置rules/only/except的作业默认仅在branches或tags触发的流水线中运行。而合并请求流水线(由merge_request_event触发)不属于这两类范畴,因此该作业不会自动执行。
分支推送流水线属于push类型(CI_PIPELINE_SOURCE=push),属于branches范畴,所以未配置规则的merge-request-included能正常执行;但合并请求流水线本身不触发默认规则的作业,只有配置了明确规则的merge-request-direct会运行。
另外注意:你的ci/default-ranch.gitlab-ci.yml文件名存在拼写错误(应为default-branch),建议修正避免后续分支流水线出现问题。
解决方法
给ci/merge-request.gitlab-ci.yml中的merge-request-included作业添加与merge-request-direct一致的运行规则:
merge-request-included: stage: build script: - echo "merge-request-included" rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" || ($CI_PIPELINE_SOURCE == "push" && $CI_OPEN_MERGE_REQUESTS)
内容的提问来源于stack exchange,提问作者emdzej
相关产品推荐
相关产品推荐

