Jenkins 集成sonar 可以提供一个dashboard给项目成员和管理者,提供一个一目了然的项目分析情况,Sonar在代码分析是非常有用的工具。下面就具体说说如何进行集成。
1、安装和配置sonar
2、与Jenkins 集成
3、通过某个具体工程项目来呈现sonar分析结果
1、Jenkins 环境: 部署在192.168.136.144 centos6.5
2、mysql: 5.6.33: 部署在 192.168.136.144
3、 sonargube 和 sonar scanner 部署在192.168.136.144
4、 jdk: 1.8 (因为高版本的jenkins和sonar 都要求1.8)
通过sonar的下载链接,我们可以下载最新的sonar 6.5版本,下载url为:https://www.sonarqube.org/downloads/
下载的版本为:sonarqube-6.5.zip,并把它部署到192.168.136.144 的 /opt 目录下。
在mysql中创建sonar的数据库:
MySQL> CREATE USER 'sonar'@'%' IDENTIFIED BY 'sonar123';
MySQL> CREATE DATABASE sonar CHARACTER SET UTF8;
MySQL> GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%';
上面主要做的事情就是:为sonar 创建一个数据库和使用这个数据库的用户,并进行授权
首先修改:/opt/sonarqube-6.5/conf/sonar.properties 中的java启动参数和数据库连接信息
sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar123
sonar.jdbc.url=jdbc:mysql://192.168.136.144:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.context=/sonar
sonar.web.host=0.0.0.0
sonar.web.port=9000
由于sonar部署包里面为了各种系统准备了启动脚本,所以我们可以根据系统情况,做一个软链接到sonar的根目录:
通过 ln -s bin/linux-x86-64/sonar.sh sonar.sh 建立一个软链接
[root@cwqsolo sonarqube-6.5]# ln -s bin/linux-x86-64/sonar.sh sonar.sh
[root@cwqsolo sonarqube-6.5]# ls -ltr
total 40
-rw-r--r-- 1 root root 7651 Jul 31 21:00 COPYING
drwxr-xr-x 8 root root 4096 Oct 4 06:44 bin
drwxr-xr-x 2 root root 4096 Oct 4 06:44 data
drwxr-xr-x 4 root root 4096 Oct 4 06:44 extensions
drwxr-xr-x 10 root root 4096 Oct 4 06:44 lib
drwxr-xr-x 2 root root 4096 Oct 4 06:44 logs
drwxr-xr-x 2 root root 4096 Oct 4 06:44 temp
drwxr-xr-x 9 root root 4096 Oct 4 06:44 web
drwxr-xr-x 2 root root 4096 Oct 4 06:56 conf
lrwxrwxrwx 1 root root 25 Oct 4 07:00 sonar.sh -> bin/linux-x86-64/sonar.sh
[root@cwqsolo sonarqube-6.5]#
通过上述部署, 在sonar部署目录下,启动和停止简化为:
sonar.sh stop
sonar.sh start
sonar.sh restart
#控制台启动
sonar.sh console
## 查看日志
tail -f ./logs/sonar.log
sonar 6需要java 1.8 版本的支持,否则会报告如下错误
在部署了java 1.8 之后,日志打印正常。说明如果环境中有多个java版本,并且缺省java 不是 jdk 1.8 怎么办呢? 可以通过修改 conf/wrapper.conf 中的属性
wrapper.conf:wrapper.java.command=java
通过修改“java”来设置1.8版本的jdk,如通过下面方式:
wrapper.conf:wrapper.java.command=/usr/java/jdk1.8.0_112/jre/bin/java
通过命令( ./sonar.sh start),就可以用url: http://192.168.136.144:9000/sonar/ 来访问sonargube服务了。 缺省账号密码 admin / admin
下面首先把sonar 中文汉化一下,从 https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases 上,下载 sonar-l10n-zh-plugin-1.17.jar,将这个插件,部署到/opt/sonarqube-6.5/extensions/plugins。 在sonar部署目录里面, 通过 ./sonar.sh restart 重启后,就可以看到中文界面了。
也可以通过administration-》system-》update 找到中文包,进行安装:
中文安装好后,重新打开sonar的界面,是这样的,清楚多了:
安装完成sonargube 服务后,还需要安装一个分析工具,可以用runner 或者scanner ,本文采用scanner ,它与sonargube的关系可以大致理解为客户端和服务端。
首先通过下面的url下载scanner2.8版本: https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.8.zip 并解压部署到 /opt目录下,完成后如下所示:
[root@cwqsolo opt]# ls -ltr
total 20
drwxr-xr-x. 2 root root 4096 Nov 22 2013 rh
drwxr-xr-x 4 root root 4096 Nov 6 2016 cloudera
drwxr-xr-x 3 root root 4096 Nov 9 2016 remi
drwxr-xr-x 10 root root 4096 Oct 4 07:23 sonarqube-6.5
drwxr-xr-x 5 root root 4096 Oct 5 00:56 sonar-scanner-2.8
[root@cwqsolo opt]#
进入 scanner 目录,并进入conf 目录,修改sonar-scanner.properties 文件,与sonar前面的设置一致:
sonar.host.url=http://192.168.136.144:9000
sonar.login=admin
sonar.password=admin
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar123
sonar.jdbc.url=jdbc:mysql://192.168.136.144:3306/sonar?useUnicode=true&characterEncoding=utf8
修改系统环境变量中/etc/profile 中的设置,在文件最后添加下面内容:
PATH=$PATH:/opt/sonar-scanner-2.8/bin
export PATH
sonar-scanner -h
启动正确后,可以看到如下界面:
scanner在于jenkins 进行集成的作用是:jenkins通过scanner传入要分析的工程,scanner再将这些分析结果,传给sonargube 进行呈现
网页上大部分都是在插件管理里,可以找到sonarqube plugin,好吧,有点衰,我的jenkins插件管理里面找不到这个插件,于是我只好采用phi 文件安装方式:
首先去这个url下载phi文件: http://updates.jenkins-ci.org/latest/sonar.hpi 这个是sonar最新插件,需要jenkins 2.6以上版本,可怜只好升级了一把jenkins。
准备好hpi文件,并升级jenkins,重启后,进入jenkins:
jenkins -》插件管理-》高级
点击上传,又是小等待后,重启。
现在在进入jenkins-》系统管理-》系统配置后,就可以出现配置sonarqube server的地方了
由于上面我们已经安装了scanner,所以这里可以配置一下,不需要选择自动安装
配置完成后,进入工程,需要进行配置下面几个sonar scanner参数:
尤其需要注意红框中的内容,低版不需要关注,但是高版本需要填写,否则scanner 会报错
如果一切顺利,构建后显示本次构建为蓝色(成功),点开 sonarQube 就可以看到代码分析工具给出的结果:
最后通过SonarQube 来展现分析的结果:
最后:总结一下各种坑
1、sonar.java.binaries property 属性错误
高版本的sonar 会报告如下错误:Please provide compiled classes of your project with sonar.java.binaries property
解决办法:
在jenkins构建配置中, 加入此参数如:
sonar.java.binaries=WebRoot/WEB-INF/classes
如果有多个目录,用逗号隔开
2、scanner 报告 SVN错误
INFO: ------------------------------------------------------------------------
ERROR: Error during SonarQube Scanner execution
java.lang.IllegalStateException: Error when executing blame for file src/com/cyrx/webapp/action/CommonController.java
at org.sonar.plugins.scm.svn.SvnBlameCommand.blame(SvnBlameCommand.java:86)
at org.sonar.plugins.scm.svn.SvnBlameCommand.blame(SvnBlameCommand.java:59)
at org.sonar.scanner.scm.ScmPublisher.publish(ScmPublisher.java:82)
at org.sonar.scanner.phases.PublishPhaseExecutor.afterSensors(PublishPhaseExecutor.java:59)
解决:
打开sonarqube的控制台,使用admin登录后 ,在配置->SCM->菜单中,将Disabled the SCM Sensor设置为true,