SonarQube导入通用问题时自定义规则Severity为何默认显示为MEDIUM?
问题描述
使用SonarQube 10.3及sonar-scanner 5.0.1.3006,尝试通过通用问题导入格式自定义问题严重程度(Severity),但导入后所有问题的严重程度均默认显示为MEDIUM。提交的导入内容如下:
{ "rules": [ { "id": "B307", "name": "eval - use of possible insecure function", "engineId": "bandit", "cleanCodeAttribute": "FORMATTED", "impacts": [ { "softwareQuality": "MAINTAINABILITY", "severity": "HIGH" } ] }, "issues": { { "engineId": "bandit", "ruleId": "B307", "primaryLocation": { "filePath": "/tmp/repo/bandit/main.py", "textRange": { "startLine": 36, "startColumn": 5 }, "message": "Use of possibly insecure function - consider using safer ast.literal_eval." } }, }
导入后问题Severity仍显示为MEDIUM,请问原因是什么?

原因分析及解决方案
1. JSON格式存在语法错误
这是导致严重程度不生效的核心原因:
issues字段应为数组类型,你错误地用{}包裹,正确格式需改为[]rules数组中最后一个对象末尾多了逗号,会触发JSON解析异常issues内部的对象前多了一个多余的{,语法不合法- 整个JSON末尾缺少闭合的
]和},结构不完整
2. 规则的软件质量属性不匹配
你定义的规则impacts中选择了MAINTAINABILITY(可维护性),但Bandit的B307规则属于安全性问题,应对应SECURITY(安全性)软件质量。SonarQube对不同软件质量的规则有默认处理逻辑,属性不匹配可能导致自定义严重程度被覆盖。
3. 现有规则配置覆盖导入定义
如果SonarQube中已存在engineId=bandit且ruleId=B307的规则,导入的规则定义不会自动覆盖现有配置。需先在SonarQube UI中删除原有规则,再重新导入自定义规则。
修正后的导入示例
{ "rules": [ { "id": "B307", "name": "eval - use of possible insecure function", "engineId": "bandit", "cleanCodeAttribute": "SAFE", "impacts": [ { "softwareQuality": "SECURITY", "severity": "HIGH" } ] } ], "issues": [ { "engineId": "bandit", "ruleId": "B307", "primaryLocation": { "filePath": "/tmp/repo/bandit/main.py", "textRange": { "startLine": 36, "startColumn": 5 }, "message": "Use of possibly insecure function - consider using safer ast.literal_eval." } } ] }
内容的提问来源于stack exchange,提问作者slightly_toasted
相关产品推荐
相关产品推荐

