Sonar Runner 因规则异常而失败

Sonar Runner fails with exception with rule

我正在尝试在 Java 8 项目上使用 Gradle 发布到 Sonar,但失败并出现以下错误:

    INFO: ------------------------------------------------------------------------
    INFO: EXECUTION FAILURE
    INFO: ------------------------------------------------------------------------
    Total time: 1:18.786s
    Final Memory: 25M/764M
    INFO: ------------------------------------------------------------------------
    ERROR: Error during Sonar runner execution
    ERROR: Unable to execute Sonar
    ERROR: Caused by: Rule 'squid:S1192' can not use 'Constant/issue' remediation function because this rule does not have a fixed remediation cost.

如果我 select 我的项目使用 FindBugs 质量配置文件,那么一切正常,统计数据会上传到声纳。但是,如果我打开 sonar way 配置文件,则会抛出上述错误。

查看错误似乎找不到修复成本(我认为需要计算修复所有技术债务需要多少天)

我已经尝试卸载其他插件 (JavaScript/Python/etc) 并离开 Java。我还尝试调整技术债务设置中的默认值。我也恢复了默认配置文件。都没有效果。

我正在使用以下版本:

有人有什么想法吗?

我从4.2版更新到4.5.4版后遇到了同样的问题。为了继续我的项目分析,我必须停用以下规则:

  • squid:MethodCyclomaticComplexity
  • 鱿鱼:S1192
  • 鱿鱼:S135

它们都抛出 "can not use 'Constant/issue' remediation function because this rule does not have a fixed remediation cost" 错误。

我的安装使用Java8、sonar-runner 2.4及以下插件:

  • sonar-checkstyle-plugin-2.2.jar
  • sonar-findbugs-plugin-3.2.jar
  • sonar-java-plugin-3.1.jar
  • sonar-javascript-plugin-2.4.jar
  • sonar-ldap-plugin-1.4.jar
  • sonar-scm-activity-plugin-1.8.jar

我通过执行以下操作成功地使 4 个有问题的规则起作用:

第一个 tables 显示全新安装的数据库状态

╔═════════════╦════════════════════════════╦══════════════════════╗
║ PLUGIN_NAME ║      PLUGIN_RULE_KEY       ║ REMEDIATION_FUNCTION ║
╠═════════════╬════════════════════════════╬══════════════════════╣
║ squid       ║ MethodCyclomaticComplexity ║ (null)               ║
║ squid       ║ S1067                      ║ (null)               ║
║ squid       ║ S1192                      ║ (null)               ║
║ squid       ║ S135                       ║ (null)               ║
╚═════════════╩════════════════════════════╩══════════════════════╝

这 table 显示从全新安装到克隆数据库的数据库状态和 运行 /setup URL.

注意:这仍然是全新安装,并且在新目录中,因此 /es 目录将不存在 Step 3 followed here

╔═════════════╦════════════════════════════╦══════════════════════╗
║ PLUGIN_NAME ║      PLUGIN_RULE_KEY       ║ REMEDIATION_FUNCTION ║
╠═════════════╬════════════════════════════╬══════════════════════╣
║ squid       ║ MethodCyclomaticComplexity ║ CONSTANT_ISSUE       ║
║ squid       ║ S1067                      ║ CONSTANT_ISSUE       ║
║ squid       ║ S1192                      ║ CONSTANT_ISSUE       ║
║ squid       ║ S135                       ║ CONSTANT_ISSUE       ║
╚═════════════╩════════════════════════════╩══════════════════════╝

为了解决这个问题,我将 REMEDIATION_FUNCTION 中的值设置回 null 并且规则现在起作用了。

update rules
set remediation_function = null
where plugin_name = 'squid'
and plugin_rule_key in ('MethodCyclomaticComplexity', 'S1192', 'S135', 'S1067')

从 SonarQube 4.3 或更早版本升级时,必须重置规则的技术债务定义:

没有 SQALE 插件:

  • 执行 SQL 查询:"UPDATE rules SET characteristic_id=NULL, remediation_function=NULL, remediation_coeff=NULL, remediation_offset=NULL WHERE characteristic_id IS NOT NULL;"
  • 删除 data/es 文件夹(如果存在)
  • 重新启动服务器。

使用 SQALE 插件:

  • 前往更新中心并安装 SQALE 插件(如果尚未安装)
  • 转到 'Back Up Model' 页面(设置 -> SQALE -> 备份/恢复)
  • 在还原模型部分,单击 'Restore' 按钮 -> 您的质量模型将被重置,所有覆盖的规则技术债务定义将被重置。
  • 去更新中心卸载SQALE插件(如果之前没有安装的话)。

此工单 https://jira.codehaus.org/browse/SONAR-5056 是此所需更改的来源。