了解sonarqube

一、sonar简介

sonar是一款静态代码质量分析工具,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,而且能够集成在IDE、Jenkins、Git等服务中,方便随时查看代码质量分析报告;

sonar通过配置的代码分析规则,从可靠性、安全性、可维护性、覆盖率、重复率等方面分析项目,风险等级从A~E划分为5个等级;

(1) 不遵循代码标准

(2) 潜在的缺陷 。

(3) 糟糕的复杂度分布 。

(4) 重复 。

(5) 注释不足或者过多

(6) 缺乏单元测试 。

(7) 糟糕的设计

同时,sonar可以集成pmd、findbugs、checkstyle等插件来扩展使用其他规则来检验代码质量;


二、环境配置

环境配置大致分为以几个步骤

1.下载SonarQube server

2.下载SonarScanner

3.配置环境变量

4.配置数据库

5.下载Swift/OC的插件

6.启动SonarQube server.

重点说明

安装不同版本的SonarQube有不同的要求。

1.例如SonarQube 7.9之后数据库就不再支持MySQL了。所以按照本文安装要先看下你要安装SonarQube对应版本的要求。这个也是我一开始,安装最新版本SonarQube,数据库配置了MySQL,所以服务一直没有起来的原因。

2.Sonar 7.9及更高版本需要JAVA 11。

本次测试环境

系统环境

Mac OS 10.15.7

必要条件

运行SonarQube的唯一前提条件是在计算机上安装Java(Oracle JRE 11或OpenJDK 11),即JDK 11。

数据库支持PostgreSQL(推荐)、Microsoft SQL ServerOracle

1).安装JDK

到Oracle官网-Java SE Downloads下载JDK 11(访问Oracle官网速度很慢,花钱买了个VPN,速度杠杠的~)

安装成功后可以在/Library/Java/JavaVirtualMachines看到jdk-11.0.10.jdk

再在终端上执行java --version,可以看到当前JDK版本信息

2).安装PostgreSQL

安装完成后,为了在终端使用psql命令,需要配置环境路径。

终端执行打开~/.bash_profile

添加export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/13/bin

保存后终端执行source ~/.bash_profile使设置生效。

现在可以在终端执行psql --version

3).配置数据库

首先使用postgres用户登录数据库

psql postgres

然后创建用户sonar并设置密码,这里的密码你可以填写自己的密码

CREATE USER sonar WITH PASSWORD 'sonar';

创建属于用户sonar的数据库sonar

CREATE DATABASE sonar OWNER sonar;

给sonar用户加上添加数据库的权限

ALTER ROLE sonar CREATEDB;

4).安装SonarQue

下载并解压soarqube(https://www.sonarqube.org/downloads/)到任意位置,下面用$SONARQUBE-HOME表示sonarqube的目录位置。

编辑$SONARQUBE-HOME/conf/sonar.properties以配置数据库设置:

sonar.jdbc.url=jdbc:postgresql://localhost/sonarsonar.jdbc.username=sonarsonar.jdbc.password=sonar

接下来cd到$SONARQUBE-HOME/bin/macosx-universal-64,执行以下命令来启动SonarQue:

./sonar.sh console

SonarQube常用命令:

./sonar.sh console #Debug信息

./sonar.sh start #启动服务

./sonar.sh stop #停止服务

./sonar.sh restart #重启服务

SonarQube启动成功,在浏览器打开http://localhost:9000,登录SonarQube,默认账号密码为admin,登录成功后会提示修改密码。

5).下载Sonar-Scanner

命令行下载:

brew install sonar-scanner

下载完成后,执行sonar-scanner --version查看版本信息.

下载zip

进入SonarScanner(https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/)选择 Mac OS X 64-bit下载zip并解压,需要将该目录下的bin目录加到系统的环境变量PATH中,以便在命令行中可以访问sonar-scanner命令。

三.Sonar-Scanner 简单使用

只需要在你的项目目录下执行如下命令(自行修改相关值):

sonar-scanner \

-Dsonar.projectKey=projectKey 

-Dsonar.sources=.

-Dsonar.host.url=http://localhost:9000

-Dsonar.login=authenticationToken

Sonar-Scanner 配置参数再使用

1) 配置全局设置

在SonarScanner的安装目录中找到/conf/sonar-scanner.properties,通过编辑更新全局设置:

#----- Default SonarQube server

#sonar.host.url=http://localhost:9000

#----- Default source code encoding

#sonar.sourceEncoding=UTF-8

#----- 登录账号密码

sonar.login=admin

sonar.password=xxxx

2) 配置项目参数

在项目的根目录中创建一个配置文件,名为sonar-project.properties,配置项目设置(自行调整相关参数值):

sonar.projectKey=CSSonarDemo#sonar.projectName=CSSonarDemosonar.projectVersion=1.0sonar.language=objcsonar.sources=CSSonarDemosonar.tests=CSSonarDemoTestssonar.projectDescription=测试SonarQube扫描的demosonar.login=xxxx

其中sonar.login=xxxx需替换为你SonarQube后台创建项目时创建的令牌:


3) 启动分析

便可从项目目录运行以下命令以启动分析:

sonar-scanner

分析后的项目会自动出现在SonarQube服务器中


关于iOS代码分析.

1.下载Swift/OC的插件

(https://github.com/Idean/sonar-swift/releases)

将下载下来的backelite-sonar-swift-plugin-0.4.6.jar,放到SonarQube/extensions/plugins/目录下.

2.安装其他工具

1).安装OCLint(代码分析工具)

brew tap oclint/formulaebrew install oclint

2).安装xcpretty(增加xcodebuild输出的可读性)

gem install xcpretty

3).安装lizard(复杂度检测工具)

sudo pip3 install lizard

4).安装slather(用于生成覆盖率报告)

sudo gem install slather

3.SonarQube设置“质量配置”为OCLint

在sonarqube网页上,点击项目-项目配置-质量配置-指定一个质量-OCLint-保存。

4.接着重启SonarQube,使用sonar-scanner重新分析项目,完了再刷新SonarQube后台,可以看到刚分析的项目有了报告信息。

5.关于OCLint的使用,在工程目录中新建run-sonar.sh编辑脚本如下:

PROJECT_NAME="CSSonarDemo.xcworkspace"TARGET_NAME="CSSonarDemo"rm-rf sonar-reportsmkdir sonar-reportsrm-rf./build/derivedDataxcodebuild clean-UseModernBuildSystem=NOxcodebuild-workspace ${PROJECT_NAME}-scheme ${TARGET_NAME}-UseModernBuildSystem=NO-derivedDataPath./build/derivedData-configuration Debug COMPILER_INDEX_STORE_ENABLE=NO|xcpretty-r json-compilation-database-o compile_commands.jsonoclint-json-compilation-database-e Pods---report-typehtml-o oclintReport.htmloclint-json-compilation-database-e Pods---report-typepmd-o sonar-reports/oclint.xml \-max-priority-1=9999\-max-priority-2=9999\-max-priority-3=9999\/bin/sh sonar-scanner-X

然后在工程目录中执行以下命令:

sh run-sonar.sh

5.Sonar结合OCLint展示分析结果

在SonarQube后台,我们进入项目配置-设置,可以在左侧看到前面添加的插件Swift (Backelite),点击后可以右侧看到一些路径配置,OCLint的报告的相对路径(Path to OCLint pmd formatted report)为sonar-reports/*oclint.xml,我们在可以将OCLint分析报告放置在此路径中,SonarQube即可显示出分析结果。

四.添加sonar的规则文件

1.用管理帐号登录SonarQube平台

2.从质量配置菜单进入配置页面新建:


3.输入规则名称,选择语言,点击创建:


4.创建完成:


5.进入质量配置,找到你选择的语言:


6.设置自己添件的规则文件:


可以设置自己规则为默认规则,去激活自己想要的规则

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,710评论 4 376
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,839评论 2 308
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,295评论 0 255
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,776评论 0 223
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,198评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,074评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,200评论 2 322
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,986评论 0 214
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,733评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,877评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,348评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,675评论 3 265
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,393评论 3 246
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,209评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,996评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,212评论 2 287
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 36,003评论 2 280

推荐阅读更多精彩内容