如何在脚本通过前阻止GitLab合并请求?
实现方案
1. 拆分CI Job,独立运行检查脚本
把收尾整理检查脚本从构建步骤中抽出来,单独创建一个CI Job,让它只在合并请求(MR)触发的流水线中运行,不干扰构建、测试等核心步骤的执行。
示例.gitlab-ci.yml配置:
# 保留原有的构建、测试、打包步骤 build: stage: build script: - ./build-script.sh test: stage: test script: - ./test-script.sh package: stage: package script: - ./package-script.sh # 新增独立的收尾检查Job mr-cleanup-check: stage: pre-merge-check script: - ./your-cleanup-check-script.sh rules: # 仅在合并请求触发流水线时运行 - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
2. 设置合并请求的必要检查规则
进入项目的「设置」→「合并请求」→「合并审批规则」,添加一条新规则:
- 规则类型选择「需要通过特定的CI Job」
- 在下拉列表中选中刚才创建的
mr-cleanup-checkJob - 保存规则
这样配置后,构建、测试、打包步骤会正常执行,不受检查Job结果影响;只有当mr-cleanup-check Job成功通过时,合并请求才能被批准合并,完全满足“只阻止合并,不中断构建测试”的需求。
额外提示
- 确保检查脚本返回值符合CI规范:检查通过返回
0,未通过返回1,GitLab CI会自动识别Job状态 - 如果需要针对特定分支的MR做检查,可以在
rules里添加分支条件,例如:rules: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == 'main'
内容的提问来源于stack exchange,提问作者ArmadilloChubbz65
相关产品推荐
相关产品推荐

