Sonarqube 无法显示提交的声纳扫描仪结果

Sonarqube fails to show the submitted sonar scanner result

声纳扫描仪version:3.0.1.733 声纳库版本:5.6.5

我们在 Windows 盒子上有一个声纳扫描仪,它扫描我们的项目并将结果提交到我们的声纳服务器,该服务器现在位于 Linux 盒子上。在此之前,扫描仪、声纳服务器和声纳数据库都在同一个 Windows 盒子上,我们没有遇到任何问题。我们进行了声纳数据库备份并将其恢复到我们新 Linux 框上的另一个数据库(现在 Sonar DB 和 Sonarqube 服务器在我们的 Linux 框上)。服务器是从本机包安装的

我现在的问题是当我们的扫描器提交给服务器时没有报告任何问题。我们以前有过一些问题,现在一切都归零了。

我稍微调查了一下,可以看到后台任务已成功接收和处理。甚至服务器 UI 也会显示最新扫描的日期。

扫描仪也报告成功。我 运行 扫描器处于调试模式,我可以看到与服务器的连接有 200 个状态响应。

我在日志中看不到任何异常。

如果我将扫描仪重新指向我的旧 Windows 声纳盒,它仍然会显示正确的问题数量。

谁能帮我解决这个问题?

一般嫌疑人

不一致的措施 and/or 在 SonarQube 之后的问题计数 migration/upgrade can 表明本地 ElasticSearch 索引已损坏。 (提醒:ElasticSearch 是 SonarQube 用来索引问题、规则等的搜索引擎,这样它就可以快速访问这些数据,而不必一直查询数据库,参见 SonarQube Architecture).

解决方案

  • 停止 SonarQube
  • 擦除sonar_install_dir/data/es
  • 启动SonarQube(注:重启 由于重建索引可能需要更长的时间)

根本原因分析

关于为什么首先会发生这种情况的问题:常见的情况是 ElasticSearch 索引在升级 and/or 更改数据库后未正确重建。这是一个典型的场景:您首先在嵌入式 H2 数据库上启动 SonarQube,对其进行一些试验,然后将其插入一个完整的数据库。如果 ElasticSearch 索引在两者之间没有得到 scratched/rebuilt,那么索引就会被破坏,因为它曾经同步的 database/dataset 突然改变了。

好消息

SonarQube v6.6 即将进行改进,以在应用程序级别改善 detect/handle 这种情况(即检测到 ElasticSearch 索引应该重建,因为数据库已更改)。请参阅 SONAR-5681 - 当数据库发生更改时,必须删除 Elasticsearch 索引