配置这边就不详细写了 主要 写一些报错点 如果要配置的话 可以点击传送门https://www.jianshu.com/p/f11fbd1c316e
我的是在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.<init>(Proc.java:245)
at hudson.Proc$LocalProc.<init>(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.<init>(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里面的配置中吧这个关掉就好了