发布时间:2026-10-30 15: 50: 00
代码提交后,SonarQube里的问题数量突然增加,或者测试已经通过,覆盖率却仍然是零,这些情况未必都由代码修改引起。扫描目录、测试报告和规则配置都会影响结果,扫描成功与质量门禁通过也有区别。使用时应让分析任务对应到明确的代码版本,再查看具体问题。下面以已部署SonarQube、使用SonarScanner CLI分析Python项目为例,界面名称按英文版说明。
一、SonarQube怎么进行代码质量分析
SonarQube负责处理和展示分析结果,扫描器在代码所在环境运行。开始前应准备能够访问服务端的扫描环境,并确认账号具备项目分析权限。
1、创建项目并准备令牌
项目标识用于把扫描报告送到对应项目,配置时不要只凭显示名称判断。令牌应保存在本地环境或流水线凭据中,避免提交进代码仓库。
①在【Projects】页面点击【Create Project】,选择手动创建方式,填写【Project key】和项目名称。
②点击用户菜单中的【My Account】→【Security】,生成适用于目标项目的分析令牌。
③在扫描环境中配置【SONAR_TOKEN】和【SONAR_HOST_URL】,分别填写令牌及服务端地址。
2、指定源码和测试目录
①在项目根目录新建【sonar-project.properties】,填写【sonar.projectKey】,使其与页面中的项目标识一致。
②项目采用独立目录时,设置【sonar.sources=src】和【sonar.tests=tests】,按实际目录修改。
③核对【sonar.sourceEncoding=UTF-8】,保存配置文件。
源码目录和测试目录不能照抄示例,也不应互相重叠。初始范围参数填写实际路径,不支持通配符。Maven、Gradle、.NET等项目有各自适用的扫描方式,不能把这份CLI配置直接套用到所有工程。
3、执行测试并提交分析
①在已安装pytest和coverage的项目环境中,运行【coverage run-m pytest】。
②测试完成后运行【coverage xml-o coverage.xml】,检查生成的【coverage.xml】。
③在配置文件中添加【sonar.python.coverage.reportPaths=coverage.xml】,从项目根目录执行【sonar-scanner】。
④保存扫描日志,记录本次代码提交编号及报告中的项目地址。
4、查看问题和门禁结果
①打开项目【Overview】,查看分析时间和【Quality Gate】状态。
②进入【Issues】,选择具体问题,查看涉及文件、代码位置和规则说明。
③打开【Measures】,核对覆盖率、重复率及代码量等指标。
质量门禁失败表示某项指标没有达到设定条件,并不等于扫描器执行失败。问题列表中的提示也应结合上下文判断,尤其是涉及调用关系或数据流的内容,不能只改掉被标记的那一行。
二、SonarQube代码分析结果异常怎么办
排查时可以选一个具体差异,例如某个文件没出现、某条问题仍未消失,或者覆盖率发生变化。围绕这个差异查看日志,比同时改动多个设置更容易找到原因。
1、页面没有更新时检查后台任务
①打开【Project Settings】→【Background Tasks】,找到本次扫描对应的任务。
②检查任务状态;失败时打开错误详情,记录提示及任务时间。
③核对扫描配置中的【sonar.projectKey】,有分支功能时再核对页面当前选择的【分支】。
④后台处理完成后,刷新【Overview】,检查分析时间。
扫描器上传报告后,服务端还需要处理,终端显示执行成功时,页面可能仍保留上次结果。若流水线检出了错误分支,重新扫描也只会重复分析那份代码,还应核对工作区提交编号。
2、文件数量或问题数量不对时核查范围
扫描范围既受配置文件影响,也可能受命令行参数和页面设置影响。页面上改了排除项,流水线却继续传入旧参数,结果就可能与预想不同。
①在【Project Settings】→【General Settings】→【Analysis Scope】检查源码和测试文件的包含、排除设置。
②打开【sonar-project.properties】及流水线扫描命令,核对【sonar.sources】、【sonar.tests】和【sonar.exclusions】。
③检查仓库中的【.gitignore】,并在扫描日志中查找目标【文件路径】及跳过提示。
3、覆盖率异常时检查报告和文件路径
①打开本次生成的【coverage.xml】,检查时间、文件列表及覆盖记录。
②在扫描日志中查找【coverage.xml】,核对是否成功读取以及是否出现路径无法匹配的提示。
③对照报告中的【filename】与扫描工作区目录,调整覆盖率工具配置后重新生成报告。
④检查【sonar.coverage.exclusions】,确认业务文件是否被排除在覆盖率统计之外。
SonarQube不会替项目执行测试,测试通过也不代表覆盖率报告已生成。容器路径、本机路径和扫描目录不同,可能导致报告里的文件无法匹配。覆盖率排除与源码分析排除用途不同,不宜为了让数值好看就把未覆盖的业务代码移出统计。
三、SonarQube怎样复核结果变化是否合理
同一份代码在不同规则或统计范围下,可能得到不同结果。修正配置后,应保留一组能够对照的分析记录,确认变化来自哪里。
1、区分整体代码与新代码指标
①在【Overview】或【Measures】中分别查看【New Code】和【Overall Code】。
②打开【Project Settings】→【New Code】,核对当前采用的新代码定义。
③查看【Quality Gate】中未通过的条件,确认它针对新代码还是整体代码。
新代码范围变化后,覆盖率和问题数量也可能变化。例如整体覆盖率较高,但本次新增代码没有测试,新代码门禁仍可能失败。比较两次结果时,应使用相同范围,不能拿整体指标去解释新代码条件。
2、用具体问题验证修正结果
规则配置变化或分析器更新,也可能带来新增提示。遇到代码没动、问题却变多的情况,可以从一条有代表性的提示开始核对。
①打开【Quality Profiles】,查看项目所用语言的规则配置,核对相关规则是否启用及参数是否变化。
②在【Issues】中记录目标问题的文件、位置和规则,修改代码后重新运行测试及扫描。
③等待【Background Tasks】处理完成,再查看该问题状态和对应指标。
④将扫描配置、测试报告及代码提交编号随流水线记录保存。
总结
SonarQube适合持续发现代码问题,但结果需要放在具体版本、规则和统计范围中理解。团队采用稳定的分析配置,才能看清代码修改带来的变化,也方便评审人员追查某项指标为何升降。遇到可疑结果时,保留具体文件和任务记录,后续讨论会更有依据。希望这些内容能帮助大家读懂分析结果,有相关需求也欢迎交流咨询。
展开阅读全文
︾