Maven Sonarqube 插件:无法执行 SonarQube:无法从服务器获取引导索引

Posted

技术标签:

【中文标题】Maven Sonarqube 插件:无法执行 SonarQube:无法从服务器获取引导索引【英文标题】:Maven Sonarqube plugin: Unable to execute SonarQube: Fail to get bootstrap index from server 【发布时间】:2020-08-23 00:51:27 【问题描述】:

我在为一个项目设置 sonarqube maven 插件时很头疼。

所以我有一个 sonarqube 实例,比如说https://sonarqube.mycompany.software。我在这个实例上测试了许多项目,几个月以来它运行良好。 我还有其他使用 maven 插件的项目(但使用另一个 docker 镜像来运行)

我开始了一个新项目,当然我想添加到我的自动管道中,用 sonarqube 检查代码。

当我使用 OpenJdk-8 在我的机器上执行 maven 插件时,一切运行良好:

$ mvn org.jacoco:jacoco-maven-plugin:0.8.5:prepare-agent clean test package
$ mvn sonar:sonar -Dsonar.projectKey=projectname -Dsonar.host.url=https://sonarqube.mycompany.software -Dsonar.login=youwishyouknew
[... Lots of output ...]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  16.891 s
[INFO] Finished at: 2020-05-07T18:03:00+02:00
[INFO] ------------------------------------------------------------------------

然后我尝试使用maven:3.6.3-jdk-8 图像在服务器(管道将运行的地方)上的 docker 执行完全相同的命令,我收到此错误:

$ docker run -v `pwd`/m2cache:/root/.m2 -v `pwd`/sonarcache:/root/.sonar/cache -v`pwd`:`pwd` -w`pwd` maven:3.6.3-jdk-8  mvn sonar:sonar -Dsonar.projectKey=projectname -Dsonar.host.url=https://sonarqube.mycompany.software -Dsonar.login=youwishyouknew

[INFO] 
[INFO] ---------------------------< software.mycompany:projectname >----------------------------
[INFO] Building projectname 2.3.0
[INFO] --------------------------------[ war ]---------------------------------
[INFO] 
[INFO] --- sonar-maven-plugin:3.7.0.1746:sonar (default-cli) @ projectname ---
[INFO] User cache: /root/.sonar/cache
[ERROR] SonarQube server [https://sonarqube.mycompany.software] can not be reached
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  2.286 s
[INFO] Finished at: 2020-05-07T16:06:22Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar (default-cli) on project projectname: Unable to execute SonarQube: Fail to get bootstrap index from server: Broken pipe (Write failed) -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

当我执行此操作时,绝对Sonarqube 日志中没有发生任何事情(任何日志中都没有任何移动,而当我在我的机器上运行它时,我会找到我期望找到的所有内容。)

此外,如果我尝试从 docker 映像curl sonarqube 服务器,它可以工作!也试过ping

$ docker run -v `pwd`/m2cache:/root/.m2 -v `pwd`/sonarcache:/root/.sonar/cache -v`pwd`:`pwd` -w`pwd` maven:3.6.3-jdk-8  curl https://sonarqube.mycompany.software

<!doctype html><html lang="en"><head><meta http-equiv="content-type" content="text/html; charset=UTF-8" charset="UTF-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="apple-touch-icon" sizes="57x57" href="/apple-touch-icon-57x57.png"><link rel="apple-touch-icon" sizes="60x60" href="/apple-touch-icon-60x60.png">
[... And a lot more output ... ]

它响应我所期望的 sonarqube 索引页面。

据我所知,docker maven 镜像中没有代理设置。

这很令人沮丧。

有人知道这里发生了什么以及如何解决这个问题吗?

[编辑] 所以我尝试了很多东西,其中一个奏效了:使用另一个 docker 映像。特别是,我已经尝试了所有可用的 maven jdk-8 映像:https://hub.docker.com/_/maven,并且 一个 确实有效,而所有其他都失败了:maven:3.6.3-ibmjava-8

这看起来像是一个与 java-8 相关的问题,因为所有 JDK 11 映像都按预期工作。不幸的是,该项目是在 Java 8 中,升级 JVM 时一切都会中断:-)

我把它留在这里作为一种解决方法,但我仍然想知道为什么它会在其他 docker 镜像上失败,以及将来如何解决这个问题。

【问题讨论】:

【参考方案1】:

maven 和 gradle sonarqube 分析也有这个问题,我只有 jdk8-u252+ 的这个问题。 Maven 3.6.3 官方镜像有jdk8-u262。 对我来说,使用 maven 3.5.2 没问题 (jdk-u232)。

根本原因,可能是 u252 中的 javax.net.ssl 新特性:https://www.oracle.com/java/technologies/javase/8u251-relnotes.html

【讨论】:

以上是关于Maven Sonarqube 插件:无法执行 SonarQube:无法从服务器获取引导索引的主要内容,如果未能解决你的问题,请参考以下文章

SonarQube 5.1.2和Maven 3.3集成

如何在没有 Maven 和 Docker 的 Jenkins 声明式管道中执行 SonarQube 扫描仪

SonarQube - 无法连接到没有代理的更新中心

SonarQube 没有获得单元测试覆盖率

配置sonarqube+maven

Maven 和 SonarTsPlugin 的 SonarQube 扫描仪无法运行节点