如何实现SonarQube检测失败时GitLab CI流水线同步失败?
解决SonarQube检测失败时GitLab CI流水线不终止的问题
要实现SonarQube检测(含测试用例通过率不达标)时GitLab CI流水线同步失败,需要完成以下两项配置:
1. 调整GitLab CI的SonarQube作业配置
当前作业中allow_failure: true会让作业失败不影响流水线,同时默认的sonar-scanner不会等待质量门结果,需修改如下:
sonarqube: stage: sonarqube image: sonarsource/sonar-scanner-cli tags: - dedicated-runner1 allow_failure: false # 作业失败时直接终止流水线 script: - sonar-scanner -Dsonar.projectName="${CI_PROJECT_NAME}-${CI_COMMIT_REF_SLUG}" -Dsonar.projectKey="${CI_PROJECT_NAME}-${CI_COMMIT_REF_SLUG}" -Dsonar.qualitygate.wait=true # 等待SonarQube质量门评估结果,不达标则返回非0退出码
关键修改点:
- 将
allow_failure设为false,让GitLab CI在该作业失败时终止整个流水线 - 添加
-Dsonar.qualitygate.wait=true参数,让sonar-scanner等待SonarQube的质量门结果,若质量门不通过,扫描器会返回非0状态,触发作业失败
2. 配置SonarQube质量门规则
确保SonarQube中已将测试用例通过率设置为质量门的失败条件:
- 登录SonarQube后台,进入目标项目的质量门设置页面
- 添加新的质量门条件:选择「测试通过率」指标,设置阈值(例如低于80%)时标记为失败
- 保存配置,确保该质量门绑定到目标项目
完成以上两步后,当SonarQube检测到测试用例通过率不达标时,质量门会触发失败,sonar-scanner返回非0退出码,GitLab CI作业失败,进而终止整个流水线。
内容的提问来源于stack exchange,提问作者naveen pandi
相关产品推荐
相关产品推荐

