本文搭建的代码自动化测试平台:sonar+Jenkins+maven是在centos6.8版本上进行的,本章主要介绍sonar+Jenkins+maven环境的搭建,项目配置集成将在接下来的章节进行详细介绍。

搭建的过程中需要的各软件版本如下:

sonar:7.2.1

MySQL:5.7.22

Apache tomcat :8.5.32

jenkins:2.134

jdk8

maven:3.5.4

git:采用yum安装


一、安装配置sonar

1、sonar介绍

Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。sonar最大的特点就是插件化,可以根据不同的场景需求进行插件化安装,以Java代码检测为,但同时可以检测Python、C++等多种语言。


通过客户端插件分析源代码,sonar客户端可以采用IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式,并通过各种不同的分析机制对项目源代码进行分析和扫描,并把分析扫描后的结果上传到sonar的数据库,通过sonar
web界面对分析结果进行管理,架构图为:

sonar架构图

可以从七个维度检测代码质量:

(1)复杂度分布(complexity):代码复杂度过高将难以理解

(2) 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方

(3) 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况

(4) 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范

(5) 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读

(6) 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug

(7) 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度


2、sonar安装配置

本文介绍的Sonar以官网最新的版本:sonar-7.2.1版本为演示依据,sonar各版本下载可以参考sonar官网:sonarqube.org/

将下载的sonar-7.2.1.zip上传至服务器的/iyunwen/server/下面,重命名为:sonarqube。


jdk8所在目录为:/iyunwen/server/jdk8,下载地址:oracle.com/technetwork/

snoar需要将代码检测上传至数据库,此处用MySQL,数据库MySQL安装在/iyunwen/server/mysql,MySQL采用5.7.22版本,下载链接为:dev.mysql.com/downloads


(1)、修改启动jdk

修改文件路径:/iyunwen/server/sonarqube/conf/wrapper.conf,需要制定Java的jdk版本,sonar启动采用jetty启动,为Java容器

注意:wrapper.java.command=/iyunwen/server/jdk8/bin/java一定要指定到jdk下面的Java,不能只指定/iyunwen/server/jdk8,否则启动的时候报如下错误:

--> Wrapper Started as Daemon

Launching a JVM...

Unable to start JVM: Permission denied (13)

JVM exited while loading the application.

JVM Restarts disabled.  Shutting down.

(2)、MySQL中创建sonar数据库账号密码:

创建sonar访问数据库:robot3_sonar

指定sonar访问数据库的账号:sonar,密码:Sonar2018

sonar创建的数据库和账号可以根据实际情况指定,此处不用导入数据库,表明sonar数据库是在启动的过程中自动创建数据库

(3)、修改sonar配置文件,指定数据库

修改配置文件所在目录:/iyunwen/server/sonarqube/conf/sonar.properties

设置sonar连接数据库的连接信息,如下图

(4)启动sonar:

进入/iyunwen/server/sonarqube/bin/linux-x86-64------部署的服务器为centos6.8,所以进入sonar/bin/linux-x86-64下执行start.sh,执行命令为:

./start.sh start,会有如下报错(日志路径为:/iyunwen/server/sonarqube/logs/sonar.log)

sonar启动不能使用root权限启动,创建sonar用户启动:

加入开启启动项:vim /etc/rc.local,su sonar -lc "/iyunwen/server/sonarqube/bin/linux-x86-64/sonar.sh start"

(5)访问sonar后台服务:地址为ip:9000,本文为192.168.1.160::9000,账号和密码默认为:admin/admin

(6)、汉化语言包:在administration--->marketplace--->plugins中找到chinese packet

install之后提示重启后,整个界面就变成了中文显示


3、jenkins安装

jenkins官网地址为:jenkins.io/,下载了最新的2.134版本,采用war的方式利用tomcat容器发布:



tomcat下载可以通过官网:tomcat.apache.org/downl,tomcat解压可以直接使用,此处tomcat解压到/iyunwen/server/下命名为tomcat_jenkins

需要修改tomcat_jenkins一些参数,包括如下设置:

(1)、修改bin/catalina.sh文件,指定jdk和内存大小:

JAVA_HOME=/iyunwen/server/jdk8
JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:PermSize=128M -XX:MaxNewSize=64m -XX:MaxPermSize=256m -Djava.awt.headless=true -Dfile.encoding=UTF-8"

(2)指定tomcat启动用户:

useradd tomcat -d /iyunwen/server/tomcat_jenkins -s /bin/bash
chown -R tomcat:tomcat /iyunwen/server/tomcat_jenkins

(3)上传jenkins.war文件至webapps下面,启动tomcat:

su -c /iyunwen/server/tomcat_jenkins/bin/startup.sh tomcat

在webapps下面将解压jenkins文件,将其重命名为ROOT(PS:访问jenkins地址如果不加工程名,需要将jenkins文件重新命名为ROOT,否则地址后面要加jenkins项目名称)

(4)访问配置:

此处的访问地址为:192.168.1.160:8080,如果在tomcat部署war包的过程中没有将jenkins重命名为ROOT,则访问地址为:192.168.1.160:8080/jenkins

解锁jenkins,根据提示获取对应的文件内容,输入即可解锁

解锁jenkins


自定义jenkins,此处我选择安装推荐的插件

创建jenkins管理账号

配置访问地址

以上过程配置完成之后,即可进入jenkins后台了,如下图:




4、maven安装配置

maven的官网下载地址为:maven.apache.org/downlo,此处下载的是zip文件


将maven压缩包解压到/iyunwen/server下面,重命名为maven




5、jenkins集成git+maven+sonar配置

(1)插件配置

登录jenkins后台,找到系统管理---->插件管理---->可选插件


其中必选安装的插件有git相关、maven相关、sonar相关,详细清单如下:

安装完成以后,可以在已安装中查看

(2)全局工具配置

jenkins中,系统管理--->全局工具配置   全局工具配置主要配置maven、git、sonar、jdk等的环境变量,非常重要,对于存有疑问的地方,可以点击每一个选项中的问号(?)会出现相关提示。

a、maven配置

此处maven安装在/iyunwen/server/maven下面

b、jdk配置


jdk采用的jdk8,路径为/iyunwen/server/jdk8

c、git配置

git是在服务器端采用yum安装:yum -y install git,git路径为/usr/bin/git

d、sonar-scanner配置

由第一章的架构图知,sonar-scanner为客户端,jenkins通过sonar调用检测代码

sonar-scanner下载地址为:docs.sonarqube.org/disp

下载Linux版本的sonar-scanner,上传服务器至/iyunwen/server下面,重命名为sonar-scanner,对于sonar在jenkins的配置为


e、maven配置


(3)、系统设置

在jenkins中,系统管理---->系统配置中

a、maven项目内存配置

b、sonar的server端信息配置

sonar server的配置有2项,一个为server的地址信息,一个为通信的token,如下图


对于sonar的token生成方式,需要admin登录sonar,右上角--->我的账号---->安全---->生成令牌,令牌的名字可以任意填写,将生成的token填写至jenkins server配置信息中




6、开始构建项目进行代码检测

jenkins后台---->新建任务,如下图


点击完成之后,进入配置界面,此处的配置需要额外注意,有一些特别需要注意的点,否则会出现问题

(1)源码管理

指定项目的git地址

此处,如果git没有安装或者没有将jenkins的用户key文件添加到git服务器中,则会报以下错误

此处需要注意的点有:

a、生成key文件添加git服务器

由于jenkins使用的tomcat用户启动,所以添加到git服务中的Key文件必须是tomcat的,如果添加的是root的key文件,此处仍然有问题

su tomcat
ssh-genken -t rsa

生成的key文件在:/iyunwen/server/tomcat_jenkins//.ssh/id_rsa.pub,将id_rsa.pub添加到git服务器的SSH文件中即可

b、系统中存在git服务,并确保用tomcat用户,可以git clone项目

(2)构建


采用sonar-scan扫描代码,构建中需要执行shell命令
/iyunwen/server/sonar-scanner/bin/sonar-scanner -X -Dsonar.host.url=192.168.1.160:9000  -Dsonar.language=java -Dsonar.projectName=Task -Dsonar.projectVersion=1.0 -Dsonar.projectKey=Task -Dsonar.sources=src -Dsonar.projectBaseDir=/iyunwen/server/tomcat_jenkins/.jenkins/workspace/task
其中,sonar-scanner指定了sonar的信息,因为需要修改好/iyunwen/server/sonar-scanner/conf/sonar-scanner.properties,修改内容如下:
#----- Default SonarQube server
sonar.host.url=192.168.1.160:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
sonar.jdbc.url=jdbc:mysql://192.168.1.160:3306/robot3_sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=sonar
sonar.jdbc.password=Sonar2018


保存以上配置,开始进行构建即完成了task项目的代码检测过程,检测的结果,登录sonar后台,可以查看到


到此,centos搭建代码代码检测平台:sonar+Jenkins+maven搭建篇已完成,后续章节我们将进入sonar代码检测的深度集成分析和插件使用方面