官方网站:​​http://www.sonarqube.org/​

SonarQube
是一个用于代码质量管理的开放平台,通过插件机制,SonarQube可以集成不同的测试工具,代码分析工具,
以及持续集成工具,例如 Hudson/Jenkins等。

下载地址:​​https://www.sonarqube.org/downloads/​

七个维度检测代码质量

复杂度分布:代码复杂度过高将难以理解
重复代码:程序中包含大量复制、粘贴的代码而导致代码臃肿, sonar可以展示源码中重复严重的地方
单元测试统计:统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
代码规则检查:检查代码是否符合规范
注释率:若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
潜在的Bug :检测潜在的bug
结构与设计:找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度

jenkins-代码质量测试_jenkins-代码质量测试

代码测试工具SonarQube 简介

7.9.x 版本不再支持 MySQL

基础环境依赖

​https://docs.sonarqube.org/6.7/Requirements.html​

1.数据库环境依赖

数据库要使用5.6 版本,不支持5.5的版本

jenkins-代码质量测试_jenkins-代码质量测试_02

2.java 环境依赖

jenkins-代码质量测试_jenkins-代码质量测试_03

3.系统及内核参数

useradd -s /bin/bash -m sonarqube 使用普通账户启动sonarqube;
注意一定要建一个用户,sonarqube是不能以root账户启动的

vim /etc/sysctl.conf
-----------------------------
vm.max_map_count=262144
fs.file-max=65536
-----------------------------

vim /etc/security/limits.conf
-----------------------------
sonarqube - nofile 65536
sonarqube - nproc 2048
-----------------------------

部署SonarQube

jenkins-代码质量测试_jenkins-代码质量测试_04

#1.数据库安装
apt-get install mysql-server mysql-client

vim /etc/mysql/mysql.conf.d/mysqld.cnf
--------------------------------------------
bind-address = 0.0.0.0
--------------------------------------------
#2.启动:
/etc/init.d/mysql start
#3.创建数据库默认编码utf-8并授权
mysql> create database sonar default character set utf8 collate utf8_general_ci;
mysql> GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%' IDENTIFIED BY '123456';
#4.测试sonar账户连接 mysql
mysql -usonar -p123456


解压sonarqube并配置文件
sonar依赖于java环境,而且java版本必须是1.8版本或更高,否则sonar启动失败
6.7. X 版本的sonar需要调用elasticsearch而默认需要使用普通用户启动

cd /usr/local/src/
unzip sonarqube-6.7.7.zip
ln -sv /usr/local/src/sonarqube-6.7.7 /usr/local/sonarqube
chown sonarqube.sonarqube /usr/local/src/sonarqube-6.7.7 /usr/local/sonarqube -R

su - sonarqube
sonarqube@ubuntu:~$ cd /usr/local/sonarqube
sonarqube@ubuntu:/usr/local/sonarqube$ vim conf/sonar.properties
---------------------------------------------------------------------------------------
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://127.0.0.1:3306/sonar?useUnicode=true&characterEncoding=ut
f8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
---------------------------------------------------------------------------------------
sonarqube@ubuntu:/usr/local/sonarqube$ grep "^[a-Z]" conf/sonar.properties

jenkins-代码质量测试_jenkins-代码质量测试_05

启动sonarqube【注意,注意:一定要普通用户才能启动】
sonarqube@ubuntu:/usr/local/sonarqube$ ./bin/linux-x86-64/sonar.sh start

查看日志

jenkins-代码质量测试_jenkins-代码质量测试_06

不能以root启动sonarqube

jenkins-代码质量测试_jenkins-代码质量测试_07

排错参考:​​https://blog.csdn.net/shm19990131/article/details/107527755?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_v31_ecpm-1-107527755.pc_agg_new_rank&utm_term=sonarqube+%E5%81%9C%E6%AD%A2&spm=1000.2123.3001.4430​

登录:http://192.168.47.108:9000
log in登录,默认用户名密码都是admin

jenkins-代码质量测试_jenkins-代码质量测试_08jenkins-代码质量测试_jenkins-代码质量测试_09

jenkins-代码质量测试_jenkins-代码质量测试_10

安装中文支持

#查看插件位置
sonarqube@ubuntu:/usr/local/sonarqube$ ll extensions/plugins/

jenkins-代码质量测试_jenkins-代码质量测试_11

安装中文插件

jenkins-代码质量测试_jenkins-代码质量测试_12

#Web界面安装完成插件后或者在插件目录下载插件后需要重启sonarquebe服务生效或者在web界面重启:
sonarqube@ubuntu:/usr/local/sonarqube$ ./bin/linux-x86-64/sonar.sh restart 【普通用户启动】

#Sonarquebe对代码的扫描都基于插件实现,因此要安装要扫描的开发语言插件:
Php
Java
Python

汉化包下载地址:​​https://github.com/xuhuisheng/sonar-l10n-zh/releases/​

日志

sonarqube关键的三个组件
1、ElasticSearch
2、Mysql数据库
3、web-GUI

sonarqube 启动顺序也是如此,先启动ElastcSearch,然后是数据库,然后是 web-GUI
其logs日志目录,也是按照这个顺序记录日志,在启动时分别产生:
1)access.log
针对web服务的日志,记录你所有的访问记录。
这个日志在sonar没有启动成功啥也没有,所以这个日志跟启动sonar没关系。
2)es.log:
针对es组件的日志,也是sonarqube启动第一个运行的组件,这个日志有报错,那就是es的问题。
3)sonar.log:
sonar服务的启动日志,记录所有组件的启动信息。
4)web.log:
web-GUI日志,web-GUI界面想要启动,得满足ES mysql sonar这三个要求

jenkins 服务器部署扫描器sonar scanner

下载地址:​​https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/​

官方文档:​​https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/​

sonarqube通过调用扫描器sonar scanner进行代码质量分析,即扫描器的具体工作就是扫描代码

root@jekins-master:/usr/local/src# unzip sonar-scanner-cli-4.0.0.1744-linux.zip
ln -s /usr/local/src/sonar-scanner-4.0.0.1744-linux /usr/local/sonar-scanner
root@jekins-master:/usr/local/sonar-scanner# vim conf/sonar-scanner.properties
-----------------------------------------------
sonar.host.url=http://192.168.47.108:9000
sonar.sourceEncoding=UTF-8
-----------------------------------------------

【注意,注意:必须项目目录下执行扫描】
root@jekins-master:/usr/local/src/sonar-examples-master/projects/languages/php/php-sonar-runner# /usr/local/sonar-scanner/bin/sonar-scanne

jenkins-代码质量测试_jenkins-代码质量测试_13jenkins-代码质量测试_jenkins-代码质量测试_14jenkins-代码质量测试_jenkins-代码质量测试_15

项目目录内容

jenkins-代码质量测试_jenkins-代码质量测试_16

扫描的配置文件:sonar-project.propertie 每个项目都要有

jenkins-代码质量测试_jenkins-代码质量测试_17

jenkins 执行代码扫描

1.安装插件:SonarQube Scanner

jenkins-代码质量测试_jenkins-代码质量测试_18

2.​添加sonarquebe web url

系统管理-系统配置

jenkins-代码质量测试_jenkins-代码质量测试_19

3.添加扫描器:sonarscanner

系统管理-全局工具配置

方式1:可执行命令的绝对路径(这次实验,选择方式1)

jenkins-代码质量测试_jenkins-代码质量测试_20

方式2:自动安装

jenkins-代码质量测试_jenkins-代码质量测试_21

测试

git clone git@192.168.47.106:root/linux47.git

将模板文件拷入linux47目录下,并上传到gitlab
cd linux47/
cp -r /usr/local/src/sonar-examples-master/projects/languages/php/php-sonar-runner .
git add ./*
git commit -m "v6"
git push

jenkins-代码质量测试_jenkins-代码质量测试_22

jenkins新建一个工程

1.自动拉去gitlab代码设置

jenkins-代码质量测试_jenkins-代码质量测试_23

2.配置项目进行扫描:

sonar.projectKey=org.sonarqube:php-simple-sq-scanner
sonar.projectName=PHP :: Simple Project :: SonarQube Scanner
sonar.projectVersion=1.0
sonar.sources=./
sonar.language=php
sonar.sourceEncoding=UTF-8

jenkins-代码质量测试_jenkins-代码质量测试_24

构建后的结果

jenkins-代码质量测试_jenkins-代码质量测试_25jenkins-代码质量测试_jenkins-代码质量测试_26jenkins-代码质量测试_jenkins-代码质量测试_27

jenkins-代码质量测试_jenkins-代码质量测试_28