GitLab CI配置:如何仅在合并请求时引入外部作业?
解决GitLab CI仅在合并请求时引入外部作业的问题
首先确认你的GitLab版本是否在14.0及以上——include块中使用rules是从这个版本才开始支持的,如果版本低于14.0,这个语法根本不会生效,这是最容易踩的坑。
如果版本符合要求,试试调整include的rules写法,去掉冗余的when: always配置(满足if条件时默认就是执行状态,多余的配置可能导致解析异常):
include: - project: "configs/gitlab-ci" file: "checks.gitlab-ci.yml" rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event"
要是上述写法还是不生效,可以换一种思路:不在include层面控制,而是在被引入的checks.gitlab-ci.yml文件中,给所有作业统一添加规则:
# checks.gitlab-ci.yml 示例 lint_job: script: echo "Running lint check" rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" test_job: script: echo "Running unit tests" rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event"
或者在本地引入文件后,用extends给所有引入的作业批量添加规则,避免逐个修改外部文件:
include: - project: "configs/gitlab-ci" file: "checks.gitlab-ci.yml" # 定义通用的MR仅执行规则 .mr_only_rule: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" # 给引入的作业逐个继承规则 lint_job: extends: .mr_only_rule test_job: extends: .mr_only_rule
另外可以临时添加一个调试作业,打印CI_PIPELINE_SOURCE变量的值,确认变量在合并请求场景下的取值是否符合预期:
debug_pipeline_source: script: - echo "Current CI_PIPELINE_SOURCE: $CI_PIPELINE_SOURCE" rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event"
内容的提问来源于stack exchange,提问作者daneos
相关产品推荐
相关产品推荐

