sonar介绍

sonar是一款开源的代码质量检查工具,基本支持所有流行的编程语言。平时我们自己做代码review费时费力而且对审查的人要求比较高,一般是资深开发人员进行审查,有了sonar后上万行代码片刻之间就可以完成review,事无巨细的给你指出代码中存在的问题还能指导你如何进行修复。

在sonar中,问题分为三种,每种按照严重程度分为A-E五个级别,三种问题分别为:

  • bug,sonar能识别出非运行时bug,比如空指针没处理等。
  • Vulnerabilities(漏洞),存在的安全问题
  • bad smell(坏代码),不规范的代码,这个可以帮助我们改正我们代码中的一些不良习惯。

以下是sonar检测完后的报告:

可以点击查看问题列表

点击问题,可以查看具体的代码行数和解决方案

本文分为两章,第一章节介绍如何安装,第二章节介绍如何使用。

安装

本次采用docker方式进行安装,sonar官方对镜像的维护还是蛮积极的,有非常多的版本提供选择,这里可以查看所有sonar镜像版本,本次安装采用默认lastst版本。

环境信息设置

[root]
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 4096

安装sonar

第一次启动执行以下命令

docker run -d -p 9000:9000 sonarqube

sonarqube启动后通过docker ps找到sonarqube的id

如果是在kubernetes环境下可能会找到两个,其中一个是基础POD,一般名称会有POD标识,另外一个就是sonarqube的容器。
docker ps|grep sonarqube
f56314296567        0956756d5b96                                            "./bin/run.sh"           9 minutes ago       Up 9 minutes                            k8s_infra-sonarqube_infra-sonarqube-774ccd77d4-llcg5_infra_ce2f53e3-4f08-11ea-9358-00163e103021_0
d885fcda6510        rancher/pause:3.1                                       "/pause"                 9 minutes ago       Up 9 minutes                            k8s_POD_infra-sonarqube-774ccd77d4-llcg5_infra_ce2f53e3-4f08-11ea-9358-00163e103021_0
f56314296567就是sonarqube的容器id,获取到容器id后,本地创建相关目录并通过docker cp命令将相关数据从容器中复制出来。
[root]
mkdir -p /data/sonar/conf
mkdir -p /data/sonar/logs
mkdir -p /data/sonar/data
mkdir -p /data/sonar/extensions
chown -R 999:999 /data/sonar/
docker cp f56314296567:/opt/sonarqube/conf /data/sonar/
docker cp f56314296567:/opt/sonarqube/extensions /data/sonar/
ll /data/sonar/conf
total 24
-rw-r--r-- 1 root root 20009 Dec  9 21:11 sonar.properties
-rw-r--r-- 1 root root  3217 Dec  9 21:11 wrapper.conf
之所以要执行chown -R 999:999 /data/sonar/命令,原因是如果不设置权限在启动的时候会报以下错误
2020-02-14 09:58:16,278 main ERROR Unable to create file /opt/sonarqube/logs/es.log java.io.IOException: Permission denied
        at java.base/java.io.UnixFileSystem.createFileExclusively(Native Method)
        at java.base/java.io.File.createNewFile(Unknown Source)
        at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:628)
        at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:608)

重启启动sonar

docker run -d \
-p 9000:9000 \
-v /data/sonar/conf:/opt/sonarqube/conf \
-v /data/sonar/extensions:/opt/sonarqube/extensions \
-v /data/sonar/logs:/opt/sonarqube/logs \
-v /data/sonar/data:/opt/sonarqube/data \
sonarqube

启动后可以访问http://ip:9000访问系统,初始账号是admin/admin

更改数据库

sonar默认是使用内嵌的H2数据库,如果没有更改数据库会在页面下方出现一个警告提示更改数据库,H2仅用于测试不适合生产环境,在7.9版本以后,sonar不再支持mysql数据库,仅支持以下数据库:

  • postgresql
  • Microsoft SQL Server
  • Oracle
  • H2

本次以oracle为例,步骤如下

  • 在oracle数据库中创建一个schema,创建语句可以参考以下:
create temporary tablespace sonartmp
tempfile '/u01/oracle/11.2.0.4/oradata/definesys/sonartmp.DBF'
size 100 m
autoextend on  
next 100 m maxsize 4096m
extent management local;
 
create tablespace sonar
logging
datafile '/u01/oracle/11.2.0.4/oradata/definesys/sonar.DBF'
size 1024 m
autoextend on  
next 100 m maxsize 4096m
extent management local;
 
create user sonar identified by sonar
default tablespace sonar
temporary tablespace sonartmp;
 
grant connect ,resource,create view,create trigger to sonar;
  • 上传oracle jdbc驱动到extensions/jdbc-driver/oracle/目录下,如果做了映射就是映射目录下,本例中为/data/sonar/extensions/jdbc-driver/oracle/
注意:sonar不支持ojdbc6的驱动,驱动版本需要>=ojdbc7,可以在这里下载到所有驱动。
  • 修改/data/sonar/conf/sonar.properties配置文件,将以下注释打开
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:oracle:thin:@172.16.81.1:1521:db
在实际操作中,有些版本的sonar并不生效,如果没有生效,可以加到docker的环境变量里重新启动,启动命令如下:
docker run -d \
  -e sonar.jdbc.username=sonar \
  -e sonar.jdbc.password=sonar \
  -e sonar.jdbc.url=jdbc:oracle:thin:@172.16.81.1:1521:db \
  -p 9000:9000 \
  -v /data/sonar/conf:/opt/sonarqube/conf \
  -v /data/sonar/extensions:/opt/sonarqube/extensions \
  -v /data/sonar/logs:/opt/sonarqube/logs \
  -v /data/sonar/data:/opt/sonarqube/data \
  sonarqube

汉化

登录系统,在插件管理中找到汉化包直接安装

安装成功后重启即可生效

,
Trackback

no comment untill now

Add your comment now