sonarqube+jenkins实现持续CodeReview

这里写图片描述

介绍篇

SonarQube 介绍

SonarQube 是 一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题。同时,它提供了丰富的插件,支持多种语言的检测,
如 Java、Python、Groovy、C、C++等几十种编程语言的检测。它主要的核心价值体现在如下几个方面:

  • 检查代码是否遵循编程标准:如命名规范,编写的规范等。
  • 检查设计存在的潜在缺陷:SonarQube 通过插件 Findbugs、Checkstyle 等工具检测代码存在的缺陷。
  • 检测代码的重复代码量:SonarQube 可以展示项目中存在大量复制粘贴的代码。
  • 检测代码中注释的程度:源码注释过多或者太少都不好,影响程序的可读可理解性。
  • 检测代码中包、类之间的关系:分析类之间的关系是否合理,复杂度情况。

SonarQube 平台是由 4 个部分组成:

  • SonarQube Server
  • SonarQube Database
  • SonarQube Plugins
  • SonarQube Scanner

SonarQube 工作流程

SonarQube 在进行代码质量管理时,会从下图 所示的七个纬度来分析项目的质量。
这里写图片描述

SonarQube 需要数据库的支持,用于存储检测项目后的分析数据,同时为了实现可持续监测,还需要持续集成工具(如Jenkins)的支持,在构建版本前,通过Jenkins+Sonar 插件执行项目分析指令,最终的结果会通过SonarQube 服务器的Web 页面展示。下图是使用SonarQube做代码持续审查的流程图:

这里写图片描述

开发人员把代码push到SCM(如gitlab)【上图第2步】,jenkins构建定义好的job,然后通过jenkins 插件(sonar scanner)分析源码【上图第3步】,jenkins把分析报告发到sonarqube server【上图第4步】。

安装篇

环境准备

  • Sonarqube 5.5
  • Sonarqube Scanner 2.4
  • MySQL 5.6
  • jenkins 2.53
  • JDK 1.7.0_79
  • CentOS release 6.5 (Final) 2.6.32-431.el6.x86_64

版本说明:

  • sonarqube5.6+ 必须要JDK1.8,所以JDK1.7下只能安装sonar5.5 .
  • sonar scanner 2.5+后也要使用JDK1.8,所以JDK1.7下就要用scanner 2.4。
  • 为安全起见,sonar的安装和启动不用root用户,而是用低权限的linux用户。

SonarQube安装

1、数据库配置

MySQL的安装这里不作介绍。并且本示例MySQL和SonarQube安装在同一台机器

创建SonarQube 服务所需的数据库:

 mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; 
 mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonarpassword';
 mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonarpassword';
 mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonarpassword';
 mysql> FLUSH PRIVILEGES;
2、SonarQube配置

下载 SonarQube5.5 后解压。按如下配置修改 $SONAR_HOME/conf/sonar.properties 文件:

sonar.jdbc.username=sonar
sonar.jdbc.password=sonarpassword
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

sonar.web.host=0.0.0.0
sonar.web.context=/
sonar.web.port=9000
3、启动SonarQube

进入sonar的bin目录($SONAR_HOME/bin/linux-x86-64),执行脚本 sonar.sh start
浏览器中访问 http://192.168.212.82:9000/ ,界面如下:

这里写图片描述

默认登录账户 admin 密码 admin,可登录后修改密码。

3.A 配置sonarqube开机启动
(1)添加sonar环境变量

修改 ~/.bash_profile


SONAR_HOME=/data/sonar/sonarqube-5.5
PATH=PATH:$SONAR_HOME/bin/linux-x86-64
export PATH SONAR_HOME
(2)/etc/init.d 下增加sonar 文件

#!/bin/sh
# chkconfig: 345 96 10
# description: SonarQube system
#
# Provides: sonar
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: SonarQube system 
# Description: SonarQube system

/usr/bin/sonar $*
(3)加入开机启动列表
sudo ln -s $SONAR_HOME/bin/linux-x86-64/sonar.sh /usr/bin/sonar
sudo chmod 755 /etc/init.d/sonar
sudo chkconfig --add sonar
4、汉化

下载 sonarqube5.5 汉化包 ,是个jar包,放到$SONAR_HOME/extensions/plugins ,重启sonarqube (sonar.sh restart)

Jenkins集成SonarQube Scanner

安装 SonarQube Scanner插件

jenkins界面 系统管理->管理插件->高级 ,手动上传hpi插件(因自动安装scanner插件是大于2.4版本,要求JDK1.8,所以这里手动安装)

这里写图片描述

先下载 SonarQube Scanner 2.4 for Jenkins ,再上传。安装后重启jenkins。成功安装后展示如下:

这里写图片描述

配置SonarQube Server

告诉Jenkins: SonarQube Server在哪

Jenkins 系统管理 -> 系统设置:

这里写图片描述

其中Server authentication token 是sonarqube Server的登录凭证,在SonarQube后台生成。只需登录到sonarqube,创建一个用户token:

这里写图片描述

这里写图片描述

添加Jenkins全局配置 - SonarQube Scanner

Jenkins 系统管理->全局配置(Global Tool Configuration)

这里写图片描述

选择自动安装, Install from Maven Central ,sonarqube Scanner 2.4版本。

使用篇

使用SonarQube Scanner 分析源码

这里采取构建后分析源码

这里写图片描述

Analysis properties 填写配置

  • sonar.projectKey=apigateway
  • sonar.projectName=apigateway #这个可自定义,报告发送到sonarqube后,sonarqube将创建以此命名的project
  • sonar.language=java #表示分析java源代码
  • sonar.java.source=1.7 #表示jdk版本为1.7
  • sonar.sources=${WORKSPACE}/src/main/java #表示源代码的目录

这里写图片描述

查看分析结果

构建jenkins job后,分析结果将发送到sonarqube。

jenkins job构建结果

这里写图片描述

sonarqube 分析结果

这里写图片描述

小结

本文介绍了sonarqube的安装、配置,以及结合jenkins来做持续的自动CodeReview。其中的安装配置过程都是笔者亲自试验过的,可供读者在参考。安装配置时需注意各个软件的版本。如果跟本文的版本有差异,安装过程也会不尽相同。

  • 6
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值