【问题标题】:Sonar analysis failing with exception after the sonar issues are resolved in the PR在 PR 中解决声纳问题后,声纳分析失败并出现异常
【发布时间】:2018-06-09 23:35:13
【问题描述】:

我们在由 jenkins 触发的构建中使用声纳分析,代码位于 bitbucket 中。当提出 PR 并且在 sonar 分析过程中没有报告任何问题时,sonar 在 bitbucket 中的 PR 上显示成功。

但是,如果 PR 的初始运行遇到任何声纳问题,声纳分析会反复失败并出现以下错误。即使在提交代码更改以解决声纳问题之后也会发生这种情况。除非我们创建一个新分支并再次提高 PR,否则声纳分析不会成功。

以下是构建日志中看到的异常:

[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.0.905:sonar (default-cli) on project assessment-parent: Unable to load component class org.sonar.batch.scan.ImmutableProjectReactor: Unable to perform Bitbucket WS operation: NullPointerException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.0.905:sonar (default-cli) on project assessment-parent:

 - 

    Unable to load component class
       org.sonar.batch.scan.ImmutableProjectReactor     at 

           org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
            at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
            at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
            at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
            at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
            at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
            at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:120)
            at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
            at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
            at org.apache.maven.cli.MavenCli.execute(MavenCli.java:584)
            at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:213)
            at org.apache.maven.cli.MavenCli.main(MavenCli.java:157)
            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:483)
            at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
            at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
            at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
            at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
           Caused by: org.apache.maven.plugin.MojoExecutionException: Unable to load component class org.sonar.batch.scan.ImmutableProjectReactor
            at org.sonarsource.scanner.maven.bootstrap.ScannerBootstrapper.execute(ScannerBootstrapper.java:65)
            at org.sonarsource.scanner.maven.SonarQubeMojo.execute(SonarQubeMojo.java:108)
            at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:132)
            at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
            ... 19 more
           Caused by: java.lang.IllegalStateException: Unable to load component class org.sonar.batch.scan.ImmutableProjectReactor
            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.instantiateComponentAsIsStartable(DefaultPicoContainer.java:1034)
            at org.picocontainer.DefaultPicoContainer.addAdapterIfStartable(DefaultPicoContainer.java:1026)
            at org.picocontainer.DefaultPicoContainer.startAdapters(DefaultPicoContainer.java:1003)
            at org.picocontainer.DefaultPicoContainer.start(DefaultPicoContainer.java:767)
            at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:141)
            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.sonar.batch.bootstrapper.Batch.execute(Batch.java:79)
            at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
            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:483)
            at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
            at com.sun.proxy.$Proxy19.execute(Unknown Source)
            at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:171)
            at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:128)
            at org.sonarsource.scanner.maven.bootstrap.ScannerBootstrapper.execute(ScannerBootstrapper.java:63)
            ... 22 more
           Caused by: java.lang.IllegalStateException: Unable to perform Bitbucket WS operation
            at com.wirelust.sonar.plugins.bitbucket.PullRequestFacade.init(PullRequestFacade.java:152)
            at com.wirelust.sonar.plugins.bitbucket.PullRequestProjectBuilder.build(PullRequestProjectBuilder.java:51)
            at org.sonar.batch.scan.ProjectBuildersExecutor.execute(ProjectBuildersExecutor.java:49)
            at org.sonar.batch.scan.ImmutableProjectReactorProvider.provide(ImmutableProjectReactorProvider.java:32)
            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:483)
            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)
            ... 56 more
           Caused by: java.lang.NullPointerException
            at com.wirelust.sonar.plugins.bitbucket.PullRequestFacade.loadExistingReviewCommentsWithPage(PullRequestFacade.java:229)
            at com.wirelust.sonar.plugins.bitbucket.PullRequestFacade.loadExistingReviewComments(PullRequestFacade.java:216)
            at com.wirelust.sonar.plugins.bitbucket.PullRequestFacade.init(PullRequestFacade.java:148)
            ... 74 more


[ERROR] 
[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 analysis completed: FAILURE
Build step 'SonarQube analysis with Maven' changed build result to FAILURE
Build step 'SonarQube analysis with Maven' marked build as failure
Finished: FAILURE

【问题讨论】:

  • 分享你的配置
  • 我们正在使用 jenkins 2.99 和 sonarqube 5.6。更新了jenkins上的各种插件,清除了jenkins缓存。
  • 这与詹金斯或声纳版本无关。问题出在 sonar-bitbucket-integration 插件 (github.com/teacurran/sonar-bitbucket) 中,其中在遍历 cmets 列表之前检查删除标志 - 看起来 bitbucket 对其 API 实现进行了更改,导致插件失败。跨度>

标签: maven jenkins sonarqube bitbucket


【解决方案1】:

如果您使用的是社区版的声纳分支插件。你的 sonar.branch.target 应该是 master。

该插件目前不执行任何有关检查分支名称的逻辑,因此如果项目不存在,指定 sonar.branch.name 或 source.branch.target 将导致错误。

可以检查 sonar.branch.name 是否等于 master 并在这种情况下返回 DefaultBranchConfiguration 实例,前提是 sonar.branch.target 也等于 master - 或者为空白或未指定 - 否则使用时可能会出现问题稍后的分支。

我不知道官方版本是如何做到的,所以无法判断我们是否保持一致,但文档似乎表明默认分支是作为 master 创建的,所以这种方法应该是一致的。

因此,我们将通过以下方式处理“缺失”项目的输入组合:

更多详情可以查看此链接https://github.com/mc1arke/sonarqube-community-branch-plugin/issues/1

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2016-01-03
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多