You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SonarQube多团队扫描覆盖率被覆盖问题咨询

SonarQube分团队扫描不覆盖整体覆盖率的解决方案

问题核心

当前循环扫描单个团队代码时,因每次扫描都指向同一个项目(Main_Prod),SonarQube会默认用本次扫描的覆盖率数据替换整个项目的历史数据,导致之前团队的覆盖信息丢失。

推荐解决方案:多模块(Multi-Module)架构

将每个团队的代码作为主项目的独立子模块,扫描子模块时仅更新该模块的覆盖率,不影响其他团队数据。

1. 主项目配置修改

在根目录的sonar-project.properties中定义主项目和子模块列表:

# 主项目基础配置
sonar.projectVersion=v1
sonar.branch.name=main
sonar.projectKey=Main_Prod
sonar.projectName=Main
sonar.login=xxxxx

# 声明所有子模块(对应10个团队)
sonar.modules=team1,team2,team3,team4,team5,team6,team7,team8,team9,team10

# 全局通用排除规则
sonar.exclusions=src/**/test/**/*, src/services/**/*test.*, src/services/**/*.tf
sonar.c.file.suffixes=-
sonar.cpp.file.suffixes=-
sonar.objc.file.suffixes=-

2. 子模块配置文件

为每个团队创建单独的配置目录(如team1/),并在其中创建sonar-project.properties:

# 子模块唯一标识,关联主项目
sonar.projectKey=Main_Prod:team1
sonar.projectName=Main - Team1

# 子模块对应的代码路径
sonar.sources=../src/services/team1/
sonar.tests=../src/services/team1/

# 子模块的测试文件规则
sonar.test.inclusions=**/test/**/*

# 子模块的覆盖率报告路径(需对应生成的专属报告)
sonar.python.xunit.reportPath=../coverage-team1.xml
sonar.python.coverage.reportPaths=../coverage-team1.xml

其他团队的配置只需替换team1为对应团队名称即可。

3. 修改扫描脚本

调整脚本,为每个团队生成专属命名的覆盖率报告,并扫描对应子模块:

team_list=("team1" "team2" "team10")
for team in "${team_list[@]}"; do
  # 生成对应团队的覆盖率报告,命名为coverage-${team}.xml
  generate_coverage "$team" "coverage-${team}.xml"
  # 扫描该团队的子模块
  sonar-scanner -Dsonar.projectBaseDir="$team"
done

备选方案1:增量扫描

开启SonarQube增量扫描,仅更新本次扫描涉及文件的覆盖率数据,保留其他文件的历史覆盖信息(需SonarQube版本≥7.7)。

修改扫描命令,添加增量扫描参数:

team_list=("team1" "team2" "team10")
for team in "${team_list[@]}"; do
  generate_coverage "$team"
  sonar-scanner \
    -Dsonar.sources=src/services/$team/ \
    -Dsonar.coverageReportPaths=coverage.xml \
    -Dsonar.incremental=true \
    -Dsonar.incremental.branch.name=main
done

备选方案2:合并覆盖率报告后全量扫描

先为所有团队生成独立覆盖率报告,合并为一个总报告后执行一次全量扫描:

team_list=("team1" "team2" "team10")
mkdir -p coverage_reports

# 生成各团队的覆盖率报告
for team in "${team_list[@]}"; do
  generate_coverage "$team" "coverage_reports/coverage-${team}.xml"
done

# 合并所有报告(以Python的coverage工具为例)
coverage combine coverage_reports/*.xml

# 执行全量扫描
sonar-scanner -Dsonar.python.coverage.reportPaths=coverage.xml

注意事项

  • 确保每个团队的覆盖率报告仅包含自身代码路径的覆盖数据,避免交叉干扰。
  • 多模块方案是长期维护的最优选择,各团队数据隔离,便于单独查看和管理。
  • 增量扫描需确保SonarQube服务器开启增量分析支持,且分支的历史分析数据完整。

内容的提问来源于stack exchange,提问作者AhmFM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 14:20:27