Jenkins系列之六整合SonarQube
??SonarQube作为一款代码质量检测工具,在实际开发的过程中对于作为代码门禁检查是非常有必要的。在Jenkins整合SonarQube之前,环境上需要先安装SonarQube软件,SonarQubu的安装很简单,但是安装的过程中会有各种各样奇葩的问题,解决方案:Centos7安装SonarQube常见问题。
一、插件安装
??Jenkins整合SonarQube也很简单,需要安装一个SonarQube Scanner的插件,插件的具体安装步骤参考:Jenkins系列之二插件安装及权限设置。 Jenkins与SonarQube的调用关系如下所示:
调用
提交审查结果
保存审查结果
Jenkins
SonarQube Scanner
SonarQube
MySql
??安装完插件之后需要添加一个SonarQube的凭证,如下图:
二、配置
??配置SonarQube服务地址,并关闭SonarQube的审查结果上传到SCM功能。
三、创建项目验证
??以之前创建的Maven项目为例,添加构建步骤,并加入Sonar执行配置参数。 配置文件具体内容如下:
# must be unique in a given SonarQube instance
sonar.projectKey=iot-service
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=iot-service
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/testtarget
配置完成之后启动构建,在SonarQube上查看检查结果。
PS: 如果构建的过程中遇到以下错误,则在配置文件中添加 sonar.java.binaries=./target/classes
ERROR: Error during SonarQube Scanner execution
org.sonar.squidbridge.api.AnalysisException: Please provide compiled classes of your project with sonar.java.binaries property
at org.sonar.java.JavaClasspath.init(JavaClasspath.java:59)
at org.sonar.java.AbstractJavaClasspath.getElements(AbstractJavaClasspath.java:281)
at org.sonar.java.SonarComponents.getJavaClasspath(SonarComponents.java:141)
at org.sonar.java.JavaSquid.<init>(JavaSquid.java:83)
at org.sonar.plugins.java.JavaSquidSensor.execute(JavaSquidSensor.java:83)
at org.sonar.scanner.sensor.SensorWrapper.analyse(SensorWrapper.java:53)
at org.sonar.scanner.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:88)
at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:82)
at org.sonar.scanner.phases.SensorsExecutor.execute(SensorsExecutor.java:68)
at org.sonar.scanner.phases.AbstractPhaseExecutor.execute(AbstractPhaseExecutor.java:88)
at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:177)
at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:135)
|