【问题标题】:SonarQube Scanner execution fails in Jenkins with java.lang.IllegalStateException ErrorSonarQube 扫描仪在 Jenkins 中执行失败并出现 java.lang.IllegalStateException 错误
【发布时间】:2018-03-21 08:49:01
【问题描述】:

Sonarqube 构建环境详情如下:

SonarQube Server Version - 5.6.6 (64-Bit). 
Sonar-scanner Version - 3.0.3.778 (running through “Execute SonarQube Scanner” in Jenkins)
sonar-java-plugin-4.14.0.11784.jar
sonar-findbugs-plugin-3.6.0.jar
Build Mode: Jenkins - (Version-2.46.2-LTS)
Build: Maven

问题描述:

在 Jenkins 本身中声明的 sonar-project.properties。分析失败并出现以下错误。

ERROR: Error during SonarQube Scanner execution
java.lang.IllegalStateException: Unable to load component class org.sonar.api.config.Settings
    at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:69)
    at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:678)
    at org.sonar.core.platform.ComponentContainer.getComponentByType(ComponentContainer.java:272)
    at org.sonar.batch.scan.ProjectScanContainer.doBeforeStart(ProjectScanContainer.java:112)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:140)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127)
    at org.sonar.batch.task.ScanTask.execute(ScanTask.java:47)
    at org.sonar.batch.task.TaskContainer.doAfterStart(TaskContainer.java:86)
    at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:142)
    at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:127)
    at org.sonar.batch.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:106)
    at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:119)
    at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:63)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
    at com.sun.proxy.$Proxy0.execute(Unknown Source)
    at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:233)
    at org.sonarsource.scanner.api.EmbeddedScanner.runAnalysis(EmbeddedScanner.java:151)
    at org.sonarsource.scanner.cli.Main.runAnalysis(Main.java:123)
    at org.sonarsource.scanner.cli.Main.execute(Main.java:77)
    at org.sonarsource.scanner.cli.Main.main(Main.java:61)
Caused by: java.lang.IllegalStateException: Unable to load component class org.sonar.batch.repository.ProjectRepositories
    at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:69)
    at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:632)
    at org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
    at org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
    at org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
    at org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
    at org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
    at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
    at org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
    at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
    at org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
    at org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
    at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
    at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
    at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:67)
    ... 23 more
Caused by: org.sonarqube.ws.client.HttpException: Error 500 on http://100.101.102.103:9000/batch/project.protobuf?key=scm.sesi.sm.ds
    at org.sonarqube.ws.client.BaseResponse.failIfNotSuccessful(BaseResponse.java:34)
    at org.sonar.batch.bootstrap.BatchWsClient.failIfUnauthorized(BatchWsClient.java:99)
    at org.sonar.batch.bootstrap.BatchWsClient.call(BatchWsClient.java:69)
    at org.sonar.batch.repository.DefaultProjectRepositoriesLoader.load(DefaultProjectRepositoriesLoader.java:58)
    at org.sonar.batch.repository.ProjectRepositoriesProvider.provide(ProjectRepositoriesProvider.java:39)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.picocontainer.injectors.MethodInjector.invokeMethod(MethodInjector.java:129)
    at org.picocontainer.injectors.MethodInjector.access$000(MethodInjector.java:39)
    at org.picocontainer.injectors.MethodInjector$2.run(MethodInjector.java:113)
    at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
    at org.picocontainer.injectors.MethodInjector.decorateComponentInstance(MethodInjector.java:120)
    at org.picocontainer.injectors.CompositeInjector.decorateComponentInstance(CompositeInjector.java:58)
    at org.picocontainer.injectors.Reinjector.reinject(Reinjector.java:142)
    at org.picocontainer.injectors.ProviderAdapter.getComponentInstance(ProviderAdapter.java:96)
    at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
    at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
    at org.sonar.core.platform.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:67)
    ... 37 more
ERROR: 
ERROR: Re-run SonarQube Scanner using the -X switch to enable full debug logging.
ERROR: SonarQube scanner exited with non-zero code: 1

sonar.log文件错误如下

2017.10.11 05:03:13 ERROR web[o.s.s.w.WebServiceEngine] Fail to process request http://100.101.102.103:9000/batch/project.protobuf?key=scm.sesi.sm.ds
java.lang.NullPointerException: null
    at com.google.protobuf.ByteString.copyFromUtf8(ByteString.java:321) ~[protobuf-java-3.0.0-beta-2.jar:na]
    at com.google.protobuf.TextFormat.escapeText(TextFormat.java:1892) ~[protobuf-java-3.0.0-beta-2.jar:na]
    at com.google.protobuf.TextFormat$Printer.printFieldValue(TextFormat.java:428) ~[protobuf-java-3.0.0-beta-2.jar:na]
    at com.google.protobuf.TextFormat$Printer.printSingleField(TextFormat.java:368) ~[protobuf-java-3.0.0-beta-2.jar:na]
    at com.google.protobuf.TextFormat$Printer.printField(TextFormat.java:327) ~[protobuf-java-3.0.0-beta-2.jar:na]
    at com.google.protobuf.TextFormat$Printer.print(TextFormat.java:314) ~[protobuf-java-3.0.0-beta-2.jar:na]
    at com.google.protobuf.TextFormat$Printer.printFieldValue(TextFormat.java:450) ~[protobuf-java-3.0.0-beta-2.jar:na]
    at com.google.protobuf.TextFormat$Printer.printSingleField(TextFormat.java:368) ~[protobuf-java-3.0.0-beta-2.jar:na]
    at com.google.protobuf.TextFormat$Printer.printField(TextFormat.java:324) ~[protobuf-java-3.0.0-beta-2.jar:na]
    at com.google.protobuf.TextFormat$Printer.print(TextFormat.java:314) ~[protobuf-java-3.0.0-beta-2.jar:na]
    at com.google.protobuf.TextFormat$Printer.access$400(TextFormat.java:288) ~[protobuf-java-3.0.0-beta-2.jar:na]
    at com.google.protobuf.TextFormat.shortDebugString(TextFormat.java:113) ~[protobuf-java-3.0.0-beta-2.jar:na]
    at org.sonarqube.ws.MessageFormatter.print(MessageFormatter.java:32) ~[sonar-ws-5.6.6.jar:na]
    at org.sonar.server.ws.WsUtils.writeProtobuf(WsUtils.java:63) ~[sonar-server-5.6.6.jar:na]
    at org.sonar.server.batch.ProjectAction.handle(ProjectAction.java:83) ~[sonar-server-5.6.6.jar:na]
    at org.sonar.server.ws.WebServiceEngine.execute(WebServiceEngine.java:107) ~[sonar-server-5.6.6.jar:na]
    at sun.reflect.GeneratedMethodAccessor206.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_111]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_111]
    at org.jruby.javasupport.JavaMethod.invokeDirectWithExceptionHandling(JavaMethod.java:425) [jruby-complete-1.7.9.jar:na]
    at org.jruby.javasupport.JavaMethod.invokeDirect(JavaMethod.java:292) [jruby-complete-1.7.9.jar:na]
    at org.jruby.java.invokers.InstanceMethodInvoker.call(InstanceMethodInvoker.java:44) [jruby-complete-1.7.9.jar:na]
    at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:70) [jruby-complete-1.7.9.jar:na]
    at rubyjit.Api::JavaWsController$$index_E9F115BCB78D2E226E3015CDA52C1912485D30D0262463297.__file__(/opt/sonarqube-5.6.6/web/WEB-INF/app/controllers/api/java_ws_controller.rb:34) [jruby-complete-1.7.9.jar:na]

我已尝试以下方法来解决此问题,

1) Rebooted the server then re-installed all the plugins. 
2) Cleared the $SONARQUBE_HOME/data/es folder 
3) Switched the quality profile(First default then changed to custom profile).

但是同样的问题仍然存在,现在唯一未决的是我需要从 sonarqube 服务器中删除 $SONARQUBE_HOME/temp/. 数据,然后在重新启动后我需要检查分析。

【问题讨论】:

  • 您是否在$SONARQUBE_HOME/logs/web.log 文件中发现任何错误/警告?你可以尝试在那里找到等于No such file or directory的文本。
  • 其实我在$SONARQUBE_HOME/logs/目录下有access.log和sonar.log,sonar.log显示同样的错误,下面已经给出了。
  • 奇怪的是sonar.log 包含来自扫描程序执行的日志。错误必须在那里。请附上该文件。
  • sonar.log 错误添加到问题类别中。
  • 遗憾的是数据太少,无法解决问题。我做了一些研究,可能有几个原因:数据库不一致,编码无效(例如 SonarQube 和数据库之间),质量配置文件损坏(您可以尝试使用默认质量配置文件并在“第一次”分析后切换到您的),丢失文件等您可以尝试重新安装所有插件,停止服务器并删除所有临时文件,启动服务器,首先使用默认配置文件进行分析,最后使用您的配置文件。您也可以尝试通过 maven 扫描仪而不是独立扫描仪来分析您的 maven 项目。

标签: jenkins sonarqube sonarqube-scan


【解决方案1】:

100.101.102.103 真的是 SonarQube 服务器的 IP 地址吗?如果是这样,您可能忘记了配置中某处 URL 中的 sonar 上下文路径。

应该是这样的:

http://100.101.102.103:9000/sonar

代替:

http://100.101.102.103:9000/

【讨论】:

  • 我们的 Sonarqube 服务器 URL 是 - 100.101.102.103:9000,并且我们的 sonar-scanner.properties 文件中也已经配置了相同的 URL。
  • /sonar 怎么样?那是你sonar.host.url 的一部分吗?
  • 如果您通过http://100.101.102.103:9000/sonar 到达SonarQube,那么您还应该像这样配置sonar.host.url
  • 我没有在我们的 sonar.properties 文件中添加 sonar.web.context=/sonar。所以我们的声纳 URL 是 -100.101.102.103:9000,同样适用于其他项目。现在问题只针对特定项目。
  • 已经尝试过以下操作。 1)重新启动Sonar服务器并从Sonarqube主文件夹中删除es目录,然后启动服务。 2) 尝试使用 sonar-java-plugin-4.13.0.11627.jar 文件,问题还是一样。
【解决方案2】:

这似乎在 6.5 版中已修复。请参阅this 问题。或者,您可以删除您的项目,它会在没有问题的情况下重新创建。

【讨论】:

  • 好的,感谢 Chadi 提供的信息。我已经删除了该项目并创建了它开始正常工作的新项目。无论如何,如果我将来遇到同样的问题,我会在最新的 LTS 版本上检查它。
猜你喜欢
  • 2017-10-11
  • 1970-01-01
  • 2020-10-13
  • 2017-07-20
  • 2017-08-26
  • 2021-07-05
  • 2017-11-02
  • 2018-03-18
  • 2018-08-01
相关资源
最近更新 更多