一、安装
笔者遇到的问题:
特别注意版本号,不同版本不兼容导致重装很多次
注意Homebrew默认安装的插件是最新版
Sonar7.9+不再支持Mysql
Mysql8.0授权命令有更新
Sonar7.0需要使用低版本JDK
JDK1.8和JDK14同时安装了,Sonar启动时内部冲突,卸载JDK14
1.安装JDK1.8
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
2.安装Mysql5.7
- 创建sonar数据库和用户
mysql -u root -p
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
- mysql其他简单命令
show databases;
show tables;
use 数据库名;
select user,host from user;
exit;
3.安装Sonar7.0
https://www.sonarqube.org/downloads/
解压到/usr/local/sonar/sonarqube-7.0/bin/...
4.安装sonar-runner2.4
https://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zip
解压到/usr/local/sonar-runner/bin/...
二、配置
1.配置环境变量
export PATH=/usr/local/bin:$PATH
export PATH=$PATH:/usr/local/sonar-runner/bin
export PATH=$PATH:/usr/local/mysql/bin
export PATH=$PATH:/usr/local/mysql/support-files
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- 使配置生效,执行:
#若终端提示命令找不到 not found **,执行:
source ~/.bash_profile
2.添加sonar配置:
- 打开
/usr/local/sonar/sonarqube-7.0/conf/sonar.properties
添加以下
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
- 打开
/usr/local/sonar/sonarqube-7.0/conf/wrapper.conf
修改以下
#修改可用内存大小,默认设置的值太小会导致server启动失败
wrapper.java.initmemory=2096
wrapper.java.maxmemory=20960
3.添加sonar-runner配置:
- 打开
/usr/local/sonar-runner/conf/sonar-runner.properties
添加以下
sonar.host.url=http://localhost:9000
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.sourceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
4.修改mysql配置,设置更大内存和可一次性提交的包大小
- 打开
/usr/local/etc/my.cnf
添加以下
[mysqld]
...
max_allowed_packet = 150M
innodb_log_file_size = 150994944
query_cache_type=1
query_cache_size=32M
5.设置关键文件读写权限:
原因:
/usr/local/
文件下默认只有root用户能修改,而sonar内的elasticsearch
不能使用root用户运行,但是sonar要往log里写日志需要root权限。那么就将/usr/local/sonar
改为普通用户等级。
cd /usr/local/sonar
ls -l
sudo chown -R [本机用户名] /usr/local/sonar
ls -l
三、运行
1.启动mysql服务
#修改了配置记得restart服务
mysql.server start
2.启动sonar服务
cd /usr/local/sonar/sonarqube-7.0/bin/macosx-universal-64
#修改了配置记得restart服务
sh sonar.sh start
注:sonar内的
elasticsearch
不能使用root用户运行,所以不能用sudo sh sonar.sh start
3.打开 http://localhost:9000/ 校验是否成功启动sonar服务
若失败,则去
/usr/local/sonar/sonarqube-7.0/logs/
路径下查找报错日志,逐一解决问题1:常见的数据库连接失败:
- 检查mysql版本是否兼容sonar【
sonar.properties
注释有说明】- 是否成功创建了数据库和用户及授权
- 端口号3306
- mysql服务是否启动
问题2:elasticsearch不能使用root用户运行
- 不使用sudo命令启动服务
sudo sh sonar.sh start- 修改sonar安装文件根目录用户权限,参见【二-5.设置关键文件读写权限】
四、项目配置
1.安装oc的插件
https://github.com/ChenTF/iOS-sonarShell/blob/master/sonar-objective-c-plugin-0.5.0-SNAPSHOT.jar
移动到插件文件夹下:/usr/local/sonar/sonarqube-7.0/extensions/plugins
重启sonar生效
2.使用Homebrew安装xcpretty、oclint、gcovr
gem install xcpretty
brew tap oclint/formulae
brew install oclint
brew install gcovr
3.创建项目配置文件sonar-project.properties,根据自己项目情况修改,保存到项目*.xocdeproj同级目录下
https://github.com/ChenTF/iOS-sonarShell/blob/master/sonar-project.properties
4.执行扫描脚本,解析结果,整理上传
#1.编译生成错误信息 并转化成json格式
xcodebuild clean -workspace "***.xcworkspace" -scheme "***" -sdk iphonesimulator build | tee "./sonar/xcodebuild.log" | xcpretty -r json-compilation-database --output compile_commands.json
#2.oclint解析
oclint-json-compilation-database -- -max-priority-1 10000 -max-priority-2 10000 -max-priority-3 10000 -rc LONG_LINE=150 -report-type html -o oclint.xml
#3.上传到sonnar
sonar-runner
5.刷新http://localhost:9000/ 即可看到检查结果
五、Jenkins配置
上面提到的方案为手动执行扫描脚本,也可以利用CI可持续集成工具触发代码扫描,效率更高。
1.Jenkins安装插件SonarQube Scanner
2.Jenkins -> 系统管理 -> 系统配置:
在SonarQube servers
栏 设置Server URL
=http://localhost:9000/ Server authentication token
=(在http://localhost:9000/account/security/中生成token)
3.Jenkins -> 系统管理 -> 全局工具配置:
在SonarQube Scanner
栏 设置如图
4.在你的打包工程下添加构建步骤
5.配置项目,类似于sonar-project.properties
的配置
6.开始Jenkins构建项目,成功后数据会自动上传到http://localhost:9000/