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
相关产品推荐
相关产品推荐

