合并多个.NET SonarQube项目扫描结果以获取聚合统计
嘿,针对你在SonarQube 5.6.5上合并多个.NET项目扫描统计数据的需求,我整理了几个实用的方案,帮你搞定这个问题:
方案1:通过SonarQube Web API提取并手动合并数据
你之前没找到合适的API?其实SonarQube 5.6.5是有专门获取项目指标的接口的,具体用api/measures/component就能拿到你需要的核心数据,步骤如下:
- 单个项目指标获取:
调用接口时指定目标项目的key和要查询的指标代码,示例请求如下:
这里的GET api/measures/component?component=你的项目key&metricKeys=ncloc,bugs,code_smellsncloc对应LOC(代码行数),bugs是漏洞数,code_smells是代码异味数,都是5.6.5版本支持的标准指标。接口会返回JSON格式的数据,你可以从中提取对应指标的数值。 - 批量合并逻辑:
你可以用PowerShell、Python这类脚本语言写个简单的批量处理脚本:- 先把要合并的三个项目key列成一个列表
- 初始化
total_loc、total_bugs、total_code_smells三个变量为0 - 遍历每个项目key,调用上述API并解析返回的JSON,把对应指标值累加到变量中
- 最后输出合并后的总统计数据
方案2:直接查询SonarQube数据库(高效快捷,需数据库权限)
如果你有SonarQube数据库的访问权限,直接查数据库会更高效。5.6.5版本的核心指标存在project_measures表中,你可以用以下SQL语句直接获取合并结果:
SELECT SUM(CASE WHEN m.metric_id = (SELECT id FROM metrics WHERE name = 'ncloc') THEN m.value ELSE 0 END) AS total_loc, SUM(CASE WHEN m.metric_id = (SELECT id FROM metrics WHERE name = 'bugs') THEN m.value ELSE 0 END) AS total_bugs, SUM(CASE WHEN m.metric_id = (SELECT id FROM metrics WHERE name = 'code_smells') THEN m.value ELSE 0 END) AS total_code_smells FROM project_measures m JOIN projects p ON m.project_id = p.id WHERE p.kee IN ('项目key1', '项目key2', '项目key3')
注意:把SQL里的项目key1、项目key2、项目key3替换成你实际的三个项目key,执行后就能直接得到合并后的统计值。
方案3:升级版本后使用组合项目(可选)
如果后续有版本升级计划,SonarQube更高版本(比如7.9及以上)的**组合项目(Portfolio)**功能可以直接把多个子项目纳入其中,自动生成合并后的整体统计数据。不过如果暂时不能升级,前两个方案完全能满足你的需求。
内容的提问来源于stack exchange,提问作者Krupa
相关产品推荐
相关产品推荐

