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

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,请问原因是什么?

SonarQube UI显示问题

原因分析及解决方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:30:25