2015-02-26 45 views
14

我最近升級我的SonarQube服務器從4.5.2到5.0.1,再到5.1(見下面編輯)。錯誤SonarQube當啓動SVN怪

突然,一個多模塊Maven項目的分析失敗,出現以下錯誤:

[INFO] [12:02:05.045] Sensor SCM Sensor... 
[INFO] [12:02:05.169] SCM provider for this project is: svn 
[INFO] [12:02:05.169] Retrieve SCM blame information... 
[INFO] [12:02:05.185] 650 files to be analyzed 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] myproject ......................................... FAILURE [3:21.165s] 
[INFO] module1 ........................................... SKIPPED 
[INFO] module2 ........................................... SKIPPED 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 2:42.429s 
[INFO] Finished at: Thu Feb 26 11:30:01 CET 2015 
[INFO] Final Memory: 73M/2020M 
[DEBUG] [11:30:01.789] Executing: svn blame --xml --non-interactive -x -w src/main/java/MyClass.java 
[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.5:sonar (default-cli) on project myproject: java.io.IOException: Cannot run progra 
m "svn" (in directory "C:\somedirectory\module1"): CreateProcess error=2, The system cannot find the file specified 
     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:84) 
     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
     at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
     at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317) 
     at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152) 
     at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555) 
     at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214) 
     at org.apache.maven.cli.MavenCli.main(MavenCli.java:158) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     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: java.io.IOException: Cannot run program "svn" (in directory "C:\somedirectory\module1"): CreateProcess error=2, The system cannot find the file specified 
     at org.codehaus.mojo.sonar.bootstrap.ExceptionHandling.handle(ExceptionHandling.java:41) 
     at org.codehaus.mojo.sonar.bootstrap.RunnerBootstraper.execute(RunnerBootstraper.java:139) 
     at org.codehaus.mojo.sonar.SonarMojo.execute(SonarMojo.java:138) 
     at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106) 
     at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
     ... 19 more 

不知何故,命令svn沒有發現目錄C:\somedirectory\module1文件src/main/java/MyClass.java,儘管該文件肯定是存在的。如果我複製粘貼命令SonarQube試圖在目錄C:\somedirectory\module1內的命令提示符svn blame --xml --non-interactive -x -w src/main/java/MyClass.java中執行,那麼該命令工作正常。

svn命令是正確的路徑,可以在SonarQube服務器「系統信息」頁面上的「庫路徑」字段中可以看出。 SonarQube服務器託管在執行mvn sonar:sonar的同一臺服務器上(Windows Server 2008 R2)。

svn正在SonarQube推出檢索怪歷史。據我所知,there were some changes made in SonarQube 5.0 concerning SCM support(更改爲內置)。我現在的解決方法是禁用SonarQube中的SCM傳感器(使用-Dsonar.scm.disabled=true或直接在SonarQube服務器的「設置>常規設置> SCM」下)。

這是不相關的,因爲this question我只遇到過這種行爲,當我升級到5.0.1 SonarQube。使用

JRE:1.7.0_51(64位)

編輯:

升級到SonarQube 5.1後,將誤差仍然在這裏,但該消息是不同的,並且更清楚。我重新安裝一個SVN客戶端(TortoiseSVN的),並重啓雙方詹金斯和SonarQube但錯誤停留:

SCM提供商設置爲「SVN」,但沒有SCM提供商找到此鍵。沒有SCM提供商安裝

[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.5:sonar (default-cli) on project bombardier: SCM provider was set to "svn" but no SCM provider found for this key. No SCM provider installed -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.5:sonar (default-cli) on project bombardier: SCM provider was set to "svn" but no SCM provider found for this key. No SCM provider installed 
    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:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    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: SCM provider was set to "svn" but no SCM provider found for this key. No SCM provider installed 
    at org.codehaus.mojo.sonar.bootstrap.ExceptionHandling.handle(ExceptionHandling.java:41) 
    at org.codehaus.mojo.sonar.bootstrap.RunnerBootstraper.execute(RunnerBootstraper.java:139) 
    at org.codehaus.mojo.sonar.SonarMojo.execute(SonarMojo.java:138) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
    ... 19 more 
Caused by: java.lang.IllegalArgumentException: SCM provider was set to "svn" but no SCM provider found for this key. No SCM provider installed 
    at org.sonar.batch.scm.ScmConfiguration.setProviderIfSupported(ScmConfiguration.java:123) 
    at org.sonar.batch.scm.ScmConfiguration.considerOldScmUrl(ScmConfiguration.java:133) 
    at org.sonar.batch.scm.ScmConfiguration.start(ScmConfiguration.java:109) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.picocontainer.lifecycle.ReflectionLifecycleStrategy.invokeMethod(ReflectionLifecycleStrategy.java:110) 
    at org.picocontainer.lifecycle.ReflectionLifecycleStrategy.start(ReflectionLifecycleStrategy.java:89) 
    at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.start(AbstractInjectionFactory.java:84) 
    at org.picocontainer.behaviors.AbstractBehavior.start(AbstractBehavior.java:169) 
    at org.picocontainer.behaviors.Stored$RealComponentLifecycle.start(Stored.java:132) 
    at org.picocontainer.behaviors.Stored.start(Stored.java:110) 
    at org.picocontainer.DefaultPicoContainer.potentiallyStartAdapter(DefaultPicoContainer.java:1015) 
    at org.picocontainer.DefaultPicoContainer.startAdapters(DefaultPicoContainer.java:1008) 
    at org.picocontainer.DefaultPicoContainer.start(DefaultPicoContainer.java:766) 
    at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:91) 
    at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) 
    at org.sonar.batch.scan.ScanTask.scan(ScanTask.java:57) 
    at org.sonar.batch.scan.ScanTask.execute(ScanTask.java:45) 
    at org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.java:135) 
    at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) 
    at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) 
    at org.sonar.batch.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:158) 
    at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:95) 
    at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67) 
    at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:48) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87) 
    at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69) 
    at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50) 
    at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102) 
    at org.sonar.runner.api.Runner.execute(Runner.java:100) 
    at org.codehaus.mojo.sonar.bootstrap.RunnerBootstraper.execute(RunnerBootstraper.java:135) 
    ... 22 more 
+0

錯誤是很複雜的,你應該選擇其中的一部分 – dewelloper

+3

@HamitYıldırım我不同意,所有的堆棧跟蹤可能與某人調試問題相關。時間不長。 – Tunaki

回答

8

我安裝SonarQube 5後經歷了同樣的問題。1,去更新中心:

http://your_domain:port/updatecenter/available

搜索的「SVN」,單擊「安裝」

https://docs.sonarqube.org/display/PLUG/SVN+Plugin

這樣的事情就會出現:

SonarQube需要重新啓動,以便安裝以下 插件:聲納-SCM - svn的 - 插件 - 1.0.jar

重新啓動SonarQube。

+0

是的,那釘了!我沒有注意到有一個新的SVN插件。這應該在升級說明中明確提到。 – Tunaki

+0

我可以確認git一樣。我們在一臺新服務器上將Sonarqube從4.5移至6.4。舊服務器安裝了git。通過添加git-plugin [link](https://docs.sonarqube.org/display/PLUG/Git+Plugin)我解決了這個問題。 – Markus

0

請檢查SonarQube進程具有相同的環境變量,你正在使用的測試。

+0

在SonarQube'系統信息'頁面的'庫路徑'下,我有(其中包括)''C:\ Program Files \ TortoiseSVN \ bin「'和'svn'可執行文件在該文件夾下正確。 – Tunaki

34

使用下面的命令,將禁用SVN相關問題

-Dsonar.scm.disabled=True 

這將禁用SVN

+0

我已經做到了。我在SonarQube服務器上禁用了SCM傳感器,並且沒有它。但我希望它能與SCM傳感器一起工作。 – Tunaki

+3

「mvn sonar:sonar -Dsonar.scm.disabled = True」。爲我工作。謝謝 – Morvader

0

我剛纔在RedHat Linux機器上安裝SonarQube 5.0.1,我有完全一樣的問題。

相反禁用SCM統計插件的,我已經安裝了SVN客戶端(svnkit.x86_64),並構建與SCM激活成功執行。 所以我想在Windows上,你應該安裝一個svn客戶端並將其放在PATH上。

+0

感謝您的回答,但我已經在Windows機器上安裝了SVN客戶端(它是TortoiseSVN)。使用命令提示符,我可以成功執行svn命令。 – Tunaki

+0

哦,我明白了,你是否嘗試將tortoisesvn bin目錄直接添加到Windows系統路徑中?之後重新啓動Jenkins,以便更新新的環境變量。 –

+0

是的,那是我添加它的地方。 SonarQube和Jenkins服務器都重新啓動。 – Tunaki

1

我有這個問題,它是由於沒有在運行聲納分析的生成機器上安裝SVN而導致的。聲納盒安裝的並不重要。這是需要做SVN責備的構建代理。

我正在使用CentOS。神奇的是

sudo yum install svn 

最後的訣竅是確保構建機器使用SVN相同版本的結帳,因爲我安裝的版本。如果構建機器原生使用不同的版本,則可能必須確保它在下次檢出之前清理整個工作區。

最後,別忘了Sonar也需要您的SVN憑據!

+0

如何爲Sonar指定SVN憑據?這是我找不到的... – Betlista

7

這個問題可以通過兩種方式來解決,
1.通過將sonar.properties -Dsonar.scm.disabled =真,這只是sonarrunner.bat聲納分析有效的,
2.如果你做的使用任何其他類型的分析,然後用管理員默認管理員登錄是admin/admin(用戶名/密碼)。 http://yourDomin:port/settings/index(e.ghttp://localhost:9000/settings/index)然後在類別中選擇scm並禁用scm傳感器設置爲true。
3.or否則u能以管理員身份登錄網(管理/管理)後,SVN插件添加到聲納http://your_domain:port/updatecenter/available,搜索可用的插件,並選擇SVN並安裝它..