传送门
Demo源码:https://gitee.com/hcsaaron/cssonar-demo
当前文章:《iOS-SonarQue——安装及使用》
《iOS-SonarQue——展示OCLint分析结果》
《iOS-SonarQue——使用slather生成覆盖率报告》
系统环境
Mac OS 10.15.6
必要条件
运行SonarQube的唯一前提条件是在计算机上安装Java(Oracle JRE 11或OpenJDK 11),即JDK 11
。
数据库支持 PostgreSQL(推荐)、Microsoft SQL Server、Oracle
安装JDK
到Oracle官网-Java SE Downloads 下载JDK 11
(访问Oracle官网速度很慢,花钱买了个VPN,速度杠杠的~)
安装成功后可以在/Library/Java/JavaVirtualMachines
看到jdk-11.0.10.jdk
再在终端上执行java --version
,可以看到当前JDK版本信息
java 11.0.10 2021-01-19 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.10+8-LTS-162)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.10+8-LTS-162, mixed mode)
安装PostgreSQL
使用PostgreSQL,必须配置为使用UTF-8字符集。
If you want to use a custom schema and not the default "public" one, the PostgreSQL search_path property must be set:
ALTER USER mySonarUser SET search_path to mySonarQubeSchema
PostgreSQL macOS packages 这里介绍了几种安装PostgreSQL的方式,我选择了安装Postgres.app
Postgres.app是一个简单的本机macOS应用程序,无需安装程序即可在菜单栏中运行。打开应用程序,您已经准备好了PostgreSQL服务器并正在等待新的连接。关闭应用程序,然后服务器关闭。
安装完成后,为了在终端使用psql
命令,需要配置环境路径。
- 终端执行打开
~/.bash_profile
- 添加
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/13/bin
- 保存后终端执行
source ~/.bash_profile
使设置生效。
现在可以在终端执行psql --version
,显示如下说明设置成功:
psql (PostgreSQL) 13.2
如果想要图形界面客户端,可以下载安装 pgAdmin 4
配置数据库
首先使用postgres用户登录数据库
psql postgres
然后创建用户sonar并设置密码,这里的密码你可以填写自己的密码
CREATE USER sonar WITH PASSWORD 'sonar';
创建属于用户sonar的数据库sonar
CREATE DATABASE sonar OWNER sonar;
给sonar用户加上添加数据库的权限
ALTER ROLE sonar CREATEDB;
安装SonarQue
下载并解压 SonarQube 8.8 到任意位置(不可解压到以数字开头的目录中),下面用$SONARQUBE-HOME
表示sonarqube的目录位置。
编辑$SONARQUBE-HOME/conf/sonar.properties
以配置数据库设置:
sonar.jdbc.url=jdbc:postgresql://localhost/sonar
sonar.jdbc.username=sonar
sonar.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
,登录成功后会提示修改密码。
SonarQue汉化
Administration - Plugins - 搜索 Chinese Pack - Install - 重启SonarQue
下载Sonar-Scanner
- 命令行下载:
brew install sonar-scanner
下载完成后,执行sonar-scanner --version
查看版本信息:
INFO: Scanner configuration file: /usr/local/Cellar/sonar-scanner/4.4.0.2170/libexec/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 4.4.0.2170
INFO: Java 11.0.10 Oracle Corporation (64-bit)
INFO: Mac OS X 10.15.6 x86_64
- 下载zip
进入SonarScanner 选择 Mac OS X 64-bit下载zip并解压,需要将该目录下的bin目录加到系统的环境变量PATH中,以便在命令行中可以访问sonar-scanner
命令。
Sonar-Scanner 简单使用
使用SonarQube分析是非常简单的。只需要在你的项目目录下执行如下命令(自行修改相关值):
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=CSSonarDemo
sonar.projectVersion=1.0
sonar.language=objc
sonar.sources=CSSonarDemo
sonar.tests=CSSonarDemoTests
sonar.projectDescription=测试SonarQube扫描的demo
sonar.login=xxxx
其中sonar.login=xxxx
需替换为你SonarQube后台创建项目时创建的令牌:
3) 启动分析
便可从项目目录运行以下命令以启动分析:
sonar-scanner
分析后的项目会自动出现在SonarQube服务器中
安装其他工具
- 安装OCLint(代码分析工具,可查看之前写的《OCLint学习》)
brew tap oclint/formulae
brew install oclint
- 安装xcpretty(增加xcodebuild输出的可读性)
gem install xcpretty
- 安装lizard(复杂度检测工具)
sudo pip install lizard
我这边提示:
-bash: pip: command not found
改用以下命令:
sudo pip3 install lizard
补充:SonarQue启动失败原因
- JDK版本太低
前面也有说到,SonarQue需要JDK 11
,否则可以在日志中找到如下错误信息:
SonarQube requires Java 11 to run
- JDK版本不支持
刚开始我下载 Java SE 16 和 Java SE 15 都不行,可以在日志中看到下错误信息,最后下载了 Java SE 11 (LTS) 才可以(不知所以然)。
jvm 1 | Error: Could not create the Java Virtual Machine.
jvm 1 | Error: A fatal exception has occurred. Program will exit.
- 端口被占用
家里电脑启动SonarQube发现端口9001被占用,需要在sonar.properties
修改以下默认配置:
sonar.search.port=9001
http.nonProxyHosts=127.0.0.1
用lsof -i:
查看端口是否被占用:
lsof -i:9001
没有被占用则不输出任何信息,如果被占用则输出相关信息:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 9736 huangchusheng 119u IPv6 0xdac165cd4bdf31c1 0t0 TCP localhost:etlservicemgr (LISTEN)
参考资料
SonarQube Documentation 官方文档,了解更多SonarQube的使用
使用SonarQube 8.1静态检查OC代码质量