SonarQube(原名 Sonar) 是一个开源的代码质量管理系统,可以扫描项目中重复代码、编码标准、单元测试、代码覆盖率、代码复杂度、潜在 Bug、注释等.
支持 Java、C/C++、C#、PHP、Flex、Groovy、JavaScript、Python 等多种语言.
代码扫码的好处在于通过配置规则扫描代码设计缺陷和代码优化从而提高代码的质量.
本文介绍使用 docker 技术搭建 SonarQube 环境并扫描代码.
这种方式启动 sonarqube 是没有数据存储的,docker 重新加载后数据不会 reload 数据.
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube:lts
浏览器打开:0.0.0.0:9000
帐号密码:admin、admin
使用 mysql 作为数据存储,通过如下命令启动:
docker run --name mysql-5.6 -v /Users/xinxi/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123321
-p 8888:3306 -d mysql:5.6
sonarqube 不支持 mysql5.5 版本,最低支持 5.6 版本
需要注意两点:
启动命令如下:
docker run -d --name Sonarqube -p 8185:9000 -p 8186:9092
-e "SONARQUBE_JDBC_USERNAME=root"
-e "SONARQUBE_JDBC_PASSWORD=123321"
-e "SONARQUBE_JDBC_URL=jdbc:mysql://192.168.129.25:8888/
db_sonar?useUnicode=true&characterEncoding=utf8"
-d sonarqube:lts
启动成功以后,第一次页登录成功后会设置 token,这个 token 是以后被扫描代码工程中需要配置的,用于通过 token 的方式连接 Sonarqube 平台传数据结果
Android 项目是使用 gradle 管理插件,所以需要配置 gradle 文件.
在项目根目录的 gradle 配置如下:
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.5"
}
}
plugins {
# 添加插件信息
id "org.sonarqube" version "2.6-rc1"
}
apply plugin: "org.sonarqube"
执行命令:
gradle sonarqube \
-Dsonar.host.url=http://localhost:8186 \
-Dsonar.login=a1cf2c8dbdc187441c3f908b79b562404b9a4f6b
另外配置方式是在 gradle.properties 配置文件
上传结果成功
mvn sonar:sonar -Dsonar.host.url=http://localhost:9000 -Dsonar.login=c8ce928f1497f1fa5591cdcf5357aa4e44920796
先需要安装如下工具
brew tap oclint/formulae
brew install oclint
brew install sonar-scanner
brew install gcovr
需要在项目根目录增加 run-sonar.sh 和 sonar-project.properties 两个文件
具体配置请参考Demo 代码
在项目根目录下,sh run-sonar.sh
提示没有 oc 插件
通过 sonarqube 安装的 oc 插件是收费的,下载免费的 oc 插件.
https://github.com/Backelite/sonar-objective-c
然后把 backelite-sonar-objective-c-plugin-0.6.3.jar 放到 sonarqube 的 extensions/plugins 中,然后重启镜像.
sonarqube 原生不支持中文、并且没有 oc 插件.可以把汉化中文包和 oc 插件打包成新的 docker 镜像
把 sonar-l10n-zh-plugin-1.16.jar、backelite-sonar-objective-c-plugin-0.6.3.jar 和 dockerfile 放到一个目录下
dockerfile 如下:
dockfile:
FROM sonarqube
ADD sonar-l10n-zh-plugin-1.16.jar /opt/sonarqube/extensions/plugins/
ADD backelite-sonar-objective-c-plugin-0.6.3.jar /opt/sonarqube/extensions/plugins/
执行:docker build -t sonarqube:zh .
使用 Android 项目为例,首先需要在 Jenkins 中安装 sonarqube 插件,然后在系统设置中配置 SonarQube 的 servers 地址
新建 job 并配置 git 地址
在构建处选择 Execute SonarQube Scanner 中配置如下
提示需要 java 插件
在 SonarQube 中安装 java 插件并且重启
扫描代码完成并且上传扫码结果
SonarQube 查看扫描结果
SonarQube 是一款优秀代码扫描工具,可以通过静态扫码代码的方式发现编码问题,代码扫描是一种低成本高收益的方式,在持续集成中是必不可少的环节.
SonarQube 的安装与使用
https://blog.imyxiao.com/docker/sonarqube.html
SonarQube 中文插件安装
https://www.jianshu.com/p/6cc4632628b1
使用 Jenkins 进行 Android 自动打包及 SonarQube 代码自动检测
http://blog.51cto.com/536410/2052972
oclint 官方
http://oclint.org
IOS-Sonar 代码质量监控
https://blog.csdn.net/helloworld_junyang/article/details/53836001
基于 Sonar 的 iOS 代码质量检测系统
https://blog.csdn.net/hualusiyu/article/details/79349025
iOS Sonar 集成流程详解
https://www.jianshu.com/p/74bee59fef1c
Docker 构建 SonarQube 检测代码质量平台
https://blog.csdn.net/OneZhous/article/details/80527953
SonarQube + Jenkins Pipeline 配置
https://blog.csdn.net/liuxinghao/article/details/77967158