了解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 Server、Oracle
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.设置自己添件的规则文件:
可以设置自己规则为默认规则,去激活自己想要的规则