官方资料:
- SonarQube
- SonarSource Jira
一准备工作:
需要 Ruby 环境, 如果不会安装, 请参考 Mac OS X 上安装 Ruby 运行环境
安装 HomeBrew
安装 OCLint
- brew tap oclint/formulae
- brew install oclint
如果 Updating Homebrew... 卡住不动, 可以临时关闭更新
export HOMEBREW_NO_AUTO_UPDATE=true
另外可以修改 HomeBrew 的 git
- cd "$(brew --repo)"
- // 二者选其一即可更新
- // 清华镜像源
- git remote set-url origin git://mirrors.tuna.tsinghua.edu.cn/homebrew.git
- // 中科大镜像源
- git remote set-url origin http://mirrors.ustc.edu.cn/homebrew.git
安装 xcpretty
sudo gem install xcpretty
注意: 出现 Operation not permitted - /usr/bin/rougify, 原因是 gem 版本低, 如果用 sudo gem update --system 依然存在这个错误提示, 建议用 brew install ruby 重新安装
在 XCode 使用 OCLint
添加 target, 添加脚本:
OCLint
OCLint 规则加载选项
-R < 目录 >: 指定规则加载的目录可以是多个目录, 用空格隔开, 默认情况下会搜索 $(oclint 可执行文件目录)/../lib/oclint/rules
-disable-rule < 规则名 > 通过规则名使某些验证规则失效
-rc < 参数 >=< 值 > 修改某些阈值
如果遇到下面错误提示:
Error: compile_commands.json not found at current location.
找不到 complie_commands.json 文件, 是因为使用 xcpretty 生成的文件名是: compilation_db.json, 在目录 build/reports 目录中
因此需要把 xcpretty 生成的文件 compilation_db.json 复制到当前目录下重命名为 compile_commands.json
命令 oclint-json-compilation-database: 将 complie_commands.json 转换成其他格式, 并定向输出
oclint-json-compilation-database -- -report-type xcode
Report Type | -report-type |
---|---|
Plain Text Report | text |
html Report | html |
XML Report | xml |
PMD Reporter | pmd |
Xcode Reporter | xcode |
oclint-json-compilation-database -- -report-type pmd -o oclint.xml
常用规则
参数 | 规则含义 |
---|---|
-rc=LONG_LINE=200 | 每行字节数量 |
-rc=LONG_CLASS=700 | 每个类最行数 |
-rc=LONG_METHOD=80 | 每个方法行数 |
-rc=LONG_VARIABLE_NAME=20 | 变量名字最长字节 |
-rc=TOO_MANY_METHODS=30 | 方法数量 |
-rc=TOO_MANY_PARAMETERS=6 | 方法参数 |
-rc=TOO_MANY_FIELDS=20 | 字段数量 |
-rc=NESTED_BLOCK_DEPTH=5 | 嵌套深度 |
-rc=NCSS_METHOD=40 | 忽略注释后括号后的有效代码行数 |
-re=CYCLOMATIC_COMPLEXITY=10 | 圈复杂度 |
安装 JDK(Oracle 官网) 随便百度一下, 很简单
二安装 SonarQube:
下载 SonarQube, 解压后进入 SonarQube 文件夹, 执行:
./bin/macosx-universal-64/sonar.sh start
如果启动时提示:
未安装 JDK
可能是 JDK 安装失败, 重新安装即可
注意启动时, 如果出现端口冲突, 可以修改配置文件 conf/sonar.properties, 修改参数:
- sonar.web.host=127.0.0.1
- sonar.web.port=9000
然后分别执行启动命令, 打开 http://127.0.0.1:9000, 就可以正常进入 sonar 界面, 此时会有红色提示, 这是因为没有安装数据库
三安装 MySql
brew install mysql
(1) 启动 MySQL 服务
sudo /usr/local/MySQL/support-files/mysql.server start
(2) 停止 MySQL 服务
sudo /usr/local/mysql/support-files/mysql.server stop
(3) 重启 MySQL 服务
sudo /usr/local/mysql/support-files/mysql.server restart
通过默认 root 用户登录 mysql,mysql -uroot -proot, 登录之后
需要新增 sonar database 以及 sonar 用户
- 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 服务
更改 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
再重启一下 sonar 服务, 然后重新登录.
为了提高每次启动时不用输入长长的路径, 可以把 sonar 添加到环境变量中, 添加方法参考 Mac 环境变量
后来发现, 每次重启电脑时, 都不仅需要启动 Sonar 服务, 还要启动 Mysql 服务, 于是写了一个脚本, 当然也可以把脚本作为启动项, 这样连双击都省略了
- #!/bin/zsh
- mysql.server restart
- sonar.sh restart
- echo 'OK'
四 Sonar-Runner(sonar-runner 类似于一个发请求的命令, 它应该放置于执行 oclint 的 mac slave 上)
1 下载 sonar-runner
2 将压缩包解压即可, 然后可以设置一下环境变量, 方法参考 Mac 环境变量
3 配置 sonar-runner, 打开 sonar-runner/conf/sonar-runner.properties
- sonar.host.url=http://localhost:9007
- sonar.sourceEncoding=UTF-8
- sonar.login=admin
- sonar.password=admin
五 SonarQuber 集成 OC 可视化报表
1 下载 OC 插件
2 将 sonar-objective-c-plugin-0.5.0-SNAPSHOT.jar 拷贝到 SonarQuber 的 sonar/extensions/plugins/, 重启服务
3 将 sonar-project.properties 放入 iOS 项目主目录, 修改 sonar-project.properties, 参考如下:
sonar-project.properties.png
4 编写编译脚本如下:
- #!/bin/zsh
- xcodebuild clean
- xcodebuild | xcpretty -r json-compilation-database
- cp ./build/reports/compilation_db.json ./compile_commands.json
- oclint-json-compilation-database -- -report-type pmd -o oclint.xml
- sonar-runner
Github 上提供的脚本
5Web 查看上传报告
1
2
3
六安装 Jenkins
1Jenkins 官网
2 使用 brew 安装 jenkins:
brew install jenkins
3 安装时可能会提示如下错误:
Screen Shot 2018-02-16 at 23.53.12.png
按提示执行如下命令:
brew cask install caskroom/versions/java8
然后重新执行 2 命令
brew install jenkins
4 启动 Jenkins
Jenkins
5 启动 Jenkins 时可能会看到控制台输出很多 Java 警告和错误, web 页面也会看到如下提示:
Screen Shot 2018-02-17 at 01.13.37.png
这是由于安装了多个版本的 JDK 导致的, Jenkins 需要使用 Java8, 在上面安装时已经提示过了简单的做法是修改环境变量, 将 java8 设为默认
- export JAVA_9_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.4.jdk/Contents/Home
- export JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
- export JAVA_HOME=$JAVA_8_HOME
判断当前 Java 版本:
java -version
判断 JDK 路径:
/usr/libexec/java_home -V
以下为补充问题:
2018 年 2 月 26 日
执行 sonar-scanner 时提示
The rule XXX does not exist
这是因为在 oclint 在新版本版本会新增了些规则, 需要更新 sonar 服务器上对应的规则列表
先下载 Sonar Plugin for Objective-C, 然后后在路径:
sonar-objective-c-develop/sonar-objective-c-plugin/src/main/resources/org/sonar/plugins/oclint
下的 profile-oclint.xml 与 rules.txt 这两个文件, 添加对应的规则
最后再执行 build-and-deploy.sh 编译出新的 jar 包 (这个脚本需要安装 Maven)
目前发现, 编译后的 jar 无法在 sonar 上使用, 正在寻求其他办法, 也希望有办法的小伙伴, 分享一下经验
- jarfile=sonar-objective-c-plugin-0.5.0.jar
- unzip -x "$jarfile" -d "${jarfile}.tmp"
- // 注意下面命令要在临时目录中执行
- zip -ru "../$jarfile" *
来源: http://www.jianshu.com/p/634b099bccd5