SonarQube代码质量管理平台搭建使用
- SonarQube环境搭建
- 安装SonarQube
- 安装MySQL
- 安装SonarScanner
- 安装 GoJunitReport
- 安装 GoCovXML
- 安装GoMetaLinter
- 配置SonarQube
- 配置MySQL数据库连接
- 添加GoLang插件
- SonarQube使用方法
- 执行单元测试
- 计算代码覆盖率
- 执行代码静态扫描
- 导入结果到SonarQube
- SonarQube问题管理流程(待补充)
- SonarQube附加内容
- Go语言单元测试编写规则介绍(待补充)
- 语言强制规则
- 可选附加规则
SonarQube环境搭建
本文以Ubuntu Linux系统作为演示,Windows、Mac系统都可以进行参考。
安装SonarQube前,请确保Java已安装并正确配置。
安装SonarQube
1 | 专业的代码质量管理系统 |
- 进入SonarQube官网,获取SonarQube下载链接。
- 执行如下命令,下载SonarQube:
1wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.6.zip
- 解压sonarqube-6.7.6.zip,进入其bin/linux-x86-64目录(根据系统自行选择),执行如下命令:
1./sonar.sh start
- 浏览器访问 http://localhost:9000,检查SonarQube系统是否安装成功。
安装MySQL
1 | 为SonarQube准备一个单独的数据库 |
- 安装MySQL前,先进行环境清理,Ubuntu下执行如下命令(其它系统自行百度彻底清理MySQL方式):
1sudo apt-get remove --purge mysql-\*
- 执行如下命令,安装MySQL:
1sudo apt-get install mysql-server mysql-client
- 为SonarQube创建数据库及用户:
1mysql -u root -p1
2
3
4create schema sonarqube default character set utf8 collate utf8_general_ci;
create user 'sonarqube'@'%' identified by '88888888';
grant all on sonarqube.* to sonarqube;
flush privileges;
安装SonarScanner
1 2 | sonarqube官方的项目分析启动器(命令行),此处用于运行sonarqube的代码扫描规则,并将go test、go cov、gometalinter的 报告数据传入sonarqube系统 |
- 进入SonarQube官网,获取Scanner下载链接(需要仔细寻找),如下:
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner - 执行如下命令,下载Scanner
1wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip
- 解压sonar-scanner-cli-3.3.0.1492-linux.zip,将其bin目录路径加入path环境变量中(方法自行百度)
安装 GoJunitReport
1 | 将go语言单元测试结的果转换为Junit xml形式,以便sonar scanner识别使用 |
- 进入Github,搜索go-junit-report,进入项目页面 https://github.com/jstemmer/go-junit-report
- 参考项目的README.md文档,完成GoJunitReport安装,如:
1go get -u github.com/jstemmer/go-junit-report
安装 GoCovXML
1 | 将go语言计算单元测试覆盖度的结果转换为Junit xml形式,以便sonar scanner识别使用 |
- 进入Github,搜索gocov-xml,进入项目页面 https://github.com/AlekSi/gocov-xml
- 参考项目的README.md文档,完成GoCovXML安装,如:
1
2go get github.com/axw/gocov/...
go get github.com/AlekSi/gocov-xml
安装GoMetaLinter
1 | go语言代码静态检查工具,整合主流go语言检查程序,并将其输出标准化 |
- 进入Github,搜索gometalinter,进入项目页面 https://github.com/alecthomas/gometalinter
- 参考项目的README.md文档,完成GoMetaLinter安装,如:
1curl -L https://git.io/vp6lP | sh
配置SonarQube
配置MySQL数据库连接
- 打开SonarQube目录下的conf/sonar.properties文件,在MySQL配置项下增加如下配置:
1
2
3
4sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=sonarqube
sonar.jdbc.password=88888888
sonar.sorceEncoding=UTF-8 - 进入SonarQube目录下的bin/linux-x86-64目录(根据系统自行选择),执行如下命令,重启SonarQube:
1./sonar.sh restart
添加GoLang插件
- 进入SonarQube系统,点击进入配置–>应用市场,搜索并安装golang插件,可选安装Chinese Pack中文插件。
- 安装完成后,点击页面中的重启提示,进行重启。
SonarQube使用方法
准备好项目源码,进入项目根目录。
执行单元测试
执行Go语言单元测试,命令如下:
1 | go test -v ./... | go-junit-report > unittest.xml |
计算代码覆盖率
计算单元测试代码覆盖率,命令如下:
1 2 3 4 5 6 | #老的方式,Go v1.9以上版本不再支持 go test -v -coverprofile=cover.out ./... gocov convert cover.out | gocov-xml > coverage.xml #新的方式,支持Go最新版本,推荐使用 # gocov test ./... | gocov-xml > coverage.xml |
执行代码静态扫描
- 执行Go语言代码静态扫描,命令如下:
1gometalinter --checkstyle ./... > golint.xml
[可选] 你可以为项目创建GoMetaLinter配置文件.gometalinter.json ,来选择性的执行检查程序。也可以在执行gometalinter命令行中直接指定要执行的检查程序。或者完全不指定,按照默认配置运行。1
2# 命令指定示例:
gometalinter --disable-all --enable=errcheck --enable=vet --checkstyle ./...1
2
3
4# 文件指定示例: [.gometalinter.json文件]
{
"Enable": ["deadcode", "unconvert"]
}
导入结果到SonarQube
-
为项目创建SonarScanner配置文件
sonar-project.properties ,内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17sonar.host.url=http://localhost:9000 #SonarQube的访问路径
sonar.sourceEncoding=UTF-8 #源代码使用的字符集
sonar.login=sonarqube #SonarQube用户名
sonar.password=sonarqube #SonarQube用户密码
sonar.projectKey=Test #SonarQube上显示的项目名称
sonar.projectName=Test #项目的名称
sonar.projectVersion=1.0 #项目的版本
sonar.test.reportPath=unittest.xml #执行单元测试生成的文件
sonar.coverage.reportPath=coverage.xml #计算代码覆盖率生成的文件
sonar.coverage.dtdVerification=false
sonar.golint.reportPath=golint.xml #执行代码扫描生成的文件
sonar.sources=./ #源码相对于本文件的路径
sonar.sources.inclusions=**/**.go
sonar.sources.exclusions=**/**_test.go, **/vendor/*.com/**, **/vendor/*.org/**, **/vendor/**
sonar.tests=./
sonar.test.inclusions=**/**_test.go
sonar.test.exclusions=**/vendor/*.com/**, **/vendor/*.org/**, **/vendor/**如不创建项目配置文件,SonarScanner将使用 其安装目录下的conf/sonar-scanner.properties默认配置文件。
-
传入结果到SonarQube系统,命令如下:
1sonar-scanner
SonarQube问题管理流程(待补充)
暂无内容,敬请期待!
SonarQube附加内容
Go语言单元测试编写规则介绍(待补充)
语言强制规则
- 单元测试文件名必须以_test.go结尾;
- 测试用例方法必须以Test开头,且Test后一位字母不能为小写英文字母[a-z];
可选附加规则
- 单元测试文件应统一在tests目录下管理;