Sonar+OC+Jenkins 静态代码扫描

一、安装

笔者遇到的问题:

  • 特别注意版本号,不同版本不兼容导致重装很多次

  • 注意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

https://dev.mysql.com/downloads/mysql/5.7.html

  • 创建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栏 设置如图

image

4.在你的打包工程下添加构建步骤

image

5.配置项目,类似于sonar-project.properties的配置

image

6.开始Jenkins构建项目,成功后数据会自动上传到http://localhost:9000/

你可能感兴趣的:(Sonar+OC+Jenkins 静态代码扫描)