我的是在docker中配置的 对于docker中的一些步骤可以看我的docker中集成jenkins和sonarqube
[qmkx] $ sonar-scanner scan -X -e -Dsonar.host.url=192.168.1.194:9000 ******** -Dsonar.language=java -Dsonar.projectName=qmkx -Dsonar.projectVersion=1.0 -Dsonar.projectKey=qmkx -Dsonar.sources=/var/jenkins_home/workspace/qmkx/qmkx-service-user/src -Dsonar.java.binaries=/var/jenkins_home/workspace/qmkx/qmkx-service-user/target/test-classes/ -Dsonar.projectBaseDir=/var/jenkins_home/workspace/qmkx ------------------------------------------------------------------------ SONAR ANALYSIS FAILED ------------------------------------------------------------------------ FATAL: command execution failed. java.io.IOException: Cannot run program "sonar-scanner" (in directory "/var/jenkins_home/workspace/qmkx"): error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) at hudson.Proc$LocalProc.(Proc.java:245) at hudson.Proc$LocalProc. (Proc.java:214) at hudson.Launcher$LocalLauncher.launch(Launcher.java:850) at hudson.Launcher$ProcStarter.start(Launcher.java:384) at hudson.Launcher$ProcStarter.join(Launcher.java:395) at hudson.plugins.sonar.SonarRunnerBuilder.executeSonarQubeScanner(SonarRunnerBuilder.java:336) at hudson.plugins.sonar.SonarRunnerBuilder.perform(SonarRunnerBuilder.java:307) at hudson.plugins.sonar.SonarRunnerBuilder.perform(SonarRunnerBuilder.java:261) at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:735) at hudson.model.Build$BuildExecution.build(Build.java:206) at hudson.model.Build$BuildExecution.doRun(Build.java:163) at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:490) at hudson.model.Run.execute(Run.java:1735) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) at hudson.model.ResourceController.execute(ResourceController.java:97) at hudson.model.Executor.run(Executor.java:405) Caused by: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess. (UNIXProcess.java:247) at java.lang.ProcessImpl.start(ProcessImpl.java:134) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) ... 17 more ERROR: SonarQube scanner exited with non-zero code: -1 Finished: FAILURE
第一个问题 这种一般是写错了自己的scanner地址 如果不是在docker中搭建直接找地址 填写到jenkins构建中就行(这个填写地方后面会说到)如果在docker中配置的 就去看自己映射出来的目录 改成那个目录即可 我这边有个简单粗暴的方式 直接写点 sonar.sources=. 这个后面会有截图 大家不用着急
[INFO] ------------------------------------------------------------------------ Unpacking https://repo1.maven.org/maven2/org/sonarsource/scanner/cli/sonar-scanner-cli/3.2.0.1227/sonar-scanner-cli-3.2.0.1227.zip to /var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonarqube on Jenkins [qmkx] $ /var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonarqube/bin/sonar-scanner scan -X -e -Dsonar.host.url=http://192.168.1.194:9002/ ******** -Dsonar.language=java -Dsonar.projectName=qmkx -Dsonar.projectVersion=1.0 -Dsonar.projectKey=qmkx -Dsonar.sources=. -Dsonar.projectBaseDir=/var/jenkins_home/workspace/qmkx 12:02:00.831 INFO: Option -e/--errors is no longer supported and will be ignored 12:02:00.843 INFO: Scanner configuration file: /var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonarqube/conf/sonar-scanner.properties 12:02:00.845 INFO: Project root configuration file: NONE 12:02:00.863 INFO: SonarQube Scanner 3.2.0.1227 12:02:00.863 INFO: Java 1.8.0_171 Oracle Corporation (64-bit) 12:02:00.864 INFO: Linux 3.10.0-693.el7.x86_64 amd64 12:02:01.046 DEBUG: keyStore is : 12:02:01.047 DEBUG: keyStore type is : jks 12:02:01.047 DEBUG: keyStore provider is : 12:02:01.047 DEBUG: init keystore 12:02:01.047 DEBUG: init keymanager of type SunX509 12:02:01.123 DEBUG: Create: /var/jenkins_home/.sonar/cache 12:02:01.124 INFO: User cache: /var/jenkins_home/.sonar/cache 12:02:01.124 DEBUG: Create: /var/jenkins_home/.sonar/cache/_tmp 12:02:01.128 DEBUG: Extract sonar-scanner-api-batch in temp... 12:02:01.136 DEBUG: Get bootstrap index... 12:02:01.136 DEBUG: Download: http://192.168.1.194:9002/batch/index 12:02:01.166 ERROR: SonarQube server [http://192.168.1.194:9002] can not be reached 12:02:01.166 INFO: ------------------------------------------------------------------------ 12:02:01.167 INFO: EXECUTION FAILURE 12:02:01.167 INFO: ------------------------------------------------------------------------ 12:02:01.167 INFO: Total time: 0.330s 12:02:01.190 INFO: Final Memory: 6M/477M 12:02:01.190 INFO: ------------------------------------------------------------------------ 12:02:01.190 ERROR: Error during SonarQube Scanner execution org.sonarsource.scanner.api.internal.ScannerException: Unable to execute SonarQube at org.sonarsource.scanner.api.internal.IsolatedLauncherFactory.lambda$createLauncher$0(IsolatedLauncherFactory.java:85) at java.security.AccessController.doPrivileged(Native Method) at org.sonarsource.scanner.api.internal.IsolatedLauncherFactory.createLauncher(IsolatedLauncherFactory.java:74) at org.sonarsource.scanner.api.internal.IsolatedLauncherFactory.createLauncher(IsolatedLauncherFactory.java:70) at org.sonarsource.scanner.api.EmbeddedScanner.doStart(EmbeddedScanner.java:167) at org.sonarsource.scanner.api.EmbeddedScanner.start(EmbeddedScanner.java:113) at org.sonarsource.scanner.cli.Main.execute(Main.java:73) at org.sonarsource.scanner.cli.Main.main(Main.java:61) Caused by: java.lang.IllegalStateException: Fail to get bootstrap index from server at org.sonarsource.scanner.api.internal.BootstrapIndexDownloader.getIndex(BootstrapIndexDownloader.java:42) at org.sonarsource.scanner.api.internal.JarDownloader.getScannerEngineFiles(JarDownloader.java:58) at org.sonarsource.scanner.api.internal.JarDownloader.download(JarDownloader.java:53) at org.sonarsource.scanner.api.internal.IsolatedLauncherFactory.lambda$createLauncher$0(IsolatedLauncherFactory.java:76) ... 7 more Caused by: java.net.ConnectException: Failed to connect to /192.168.1.194:9002 at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.connection.RealConnection.connectSocket(RealConnection.java:225) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.connection.RealConnection.connect(RealConnection.java:149) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:195) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:121) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.connection.StreamAllocation.newStream(StreamAllocation.java:100) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:120) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67) at org.sonarsource.scanner.api.internal.shaded.okhttp.RealCall.getResponseWithInterceptorChain(RealCall.java:185) at org.sonarsource.scanner.api.internal.shaded.okhttp.RealCall.execute(RealCall.java:69) at org.sonarsource.scanner.api.internal.ServerConnection.callUrl(ServerConnection.java:113) at org.sonarsource.scanner.api.internal.ServerConnection.downloadString(ServerConnection.java:98) at org.sonarsource.scanner.api.internal.BootstrapIndexDownloader.getIndex(BootstrapIndexDownloader.java:39) ... 10 more Caused by: java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.platform.Platform.connectSocket(Platform.java:124) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.connection.RealConnection.connectSocket(RealConnection.java:223) ... 30 more ERROR: SonarQube scanner exited with non-zero code: 1 Finished: FAILURE
这个报错有两个点 第一是服务器连不上 因为之前写9000端口也不行 我换成 9002还不行 最后换回去才好了 大家多试几次 然后 在我翻墙找了很多答案之后才看见一个 也不是很成熟的解决办法 :在系统管理——Global Tool Configuration中
直接选择自动安装 这仅对docker中安装sonar适用 不在docker中装的也可以这样选择 但是不在docker中装的话自己安装Scanner 也知根知底 好维护
报错:Error during SonarQube Scanner execution
这个如果普通安装的话直接在项目的根目录中创建配置文件:sonar-project.properties即可 内容百度很多 在这里重点说docker中的sonar遇见这个问题
附上一个很好的解决方法:
Method 1: If you installed a scanner in Jenkins then just add the following in this location on your job Post Steps -> Execute SonarQube Scanner -> Analysis properties sonar.projectKey=myProject1 sonar.sources=. Method 2: Another alternative is using the deprecated method which still works fine Post-build Actions -> SonarQube analysis with Maven Method 3: Build -> Goals and options -> "enter the below script" -Dmaven.test.skip=true install sonar:sonar -Dsonar.forceAnalysis=true -Dsonar.host.url=http://localhost:9000/ -Dsonar.branch=my-branch-1
用方法1即可 直接在最后添加方式1的两行即可
最后附上 整个的jenkins配置流程:
名字随便起 然后URL写浏览器能访问的sonar地址 去docker inspect 查一下sonar是哪个版本 5.3以上的是token token获取在最上面的链接里 5.3以下的用户密码就行
这个之前说过了 这两个配置完成后就能在项目中配置了
重点来了 项目中的地方 这也是最上面说到的后面会说这个 之前有说过不在docker中安装的写一个sonar-project.properties文件 没有尝试过这些在sonar-project.properties文件中是否实用 大家可以尝试一下。
这一步走完就可以构建了 遇到问题别慌 查日志 翻墙搜答案 解决办法总是有的
最后再加一点 可能是中文报错 去sonar里面的配置中吧这个关掉就好了