本帖最后由 柠檬leung不酸 于 2018-12-12 14:23 编辑
简介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:9090
帐号密码:admin、admin
全配置启动docker启动mysql使用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版本
[color=rgb(0, 105, 214) !important]
docker启动sonarqube需要注意两点: - db_sonar数据库需要手动先创建,否则会报找不到
- 本地搭建ip地址不能写localhost,需要写内网ip
启动命令如下: 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:5432/
db_sonar?useUnicode=true&characterEncoding=utf8"
-d sonarqube:lts
效果启动成功以后,第一次页登录成功后会设置token,这个token是以后被扫描代码工程中需要配置的,用于通过token的方式连接Sonarqube平台传数据结果
[color=rgb(0, 105, 214) !important]
Android项目配置
[color=rgb(0, 105, 214) !important]
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配置文件
[color=rgb(0, 105, 214) !important]
上传结果成功
[color=rgb(0, 105, 214) !important]
扫描结果
[color=rgb(0, 105, 214) !important]
[color=rgb(0, 105, 214) !important]
mvn项目配置运行命令mvn sonar:sonar -Dsonar.host.url=http://localhost:9000 -Dsonar.login=c8ce928f1497f1fa5591cdcf5357aa4e44920796
扫描结果
[color=rgb(0, 105, 214) !important]
iOS项目配置安装先需要安装如下工具
brew tap oclint/formulae
brew install oclint
brew install sonar-scanner
brew install gcovr
项目配置需要在项目根目录增加run-sonar.sh和sonar-project.properties两个文件 具体配置请参考[color=rgb(0, 105, 214) !important]Demo代码
[color=rgb(0, 105, 214) !important]
运行命令在项目根目录下,sh run-sonar.sh
踩坑提示没有oc插件
[color=rgb(0, 105, 214) !important]
通过sonarqube安装的oc插件是收费的,下载免费的oc插件.
[color=rgb(0, 105, 214) !important]https://github.com/Backelite/sonar-objective-c
然后把backelite-sonar-objective-c-plugin-0.6.3.jar放到sonarqube的extensions/plugins中,然后重启镜像. 效果展示
[color=rgb(0, 105, 214) !important]
[color=rgb(0, 105, 214) !important]
制作镜像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 . jenkins持续集成使用Android项目为例,首先需要在Jenkins中安装sonarqube插件,然后在系统设置中配置SonarQube的servers地址
[color=rgb(0, 105, 214) !important]
新建job并配置git地址
[color=rgb(0, 105, 214) !important]
在构建处选择Execute SonarQube Scanner中配置如下
[color=rgb(0, 105, 214) !important]
提示需要java插件
[color=rgb(0, 105, 214) !important]
在SonarQube中安装java插件并且重启
[color=rgb(0, 105, 214) !important]
扫描代码完成并且上传扫码结果
[color=rgb(0, 105, 214) !important]
SonarQube查看扫描结果
[color=rgb(0, 105, 214) !important]
结语SonarQube是一款优秀代码扫描工具,可以通过静态扫码代码的方式发现编码问题,代码扫描是一种低成本高收益的方式,在持续集成中是必不可少的环节.
来源:TesterHome 作者:xinxi 地址:https://testerhome.com/topics/17117 文章仅作分享
|