sonar集成golang的检测工具

sonar中的插件SonarGo自带一些检测规则,但sonar想要集成golang的覆盖率、单元测试报告、和更多的代码规则,需要集成其他golang的检测工具

单元测试

  • 通过golang的单元测试工具go test生成单元测试报告(见代码检测工具-golang测试工具)
  • 报告使用终端转化的json文件,不可以使用转化的xml报告、不转化终端报告(亲测可以读取报告但是sonar项目中并无展示任何相关数据,同时sonar配置中的go配置中也有说明)
go test -v xxx -json > test.json
  • sonar的项目配置文件sonar-project.properties中添加如下配置:
sonar.go.tests.reportPaths=xx/xx/xx
  • sonar导入golang的单元测试报告目前有1问题未解决,就是单元测试的报告中写入的package是项目名/包名(不含/go/src),运行sonar-scanner时总是报错提示找不到package和Test函数,经亲测发现无论怎么修改测试报告、sonar-scanner的运行目录都无法解决这个问题。

覆盖率

  • 通过golang的覆盖率统计工具生成覆盖率统计报告(见代码检测工具-golang测试工具)
  • 报告需要直接使用终端报告,不可以使用转化的xml、html、txt报告(亲测sonar无法读取相应的报告,提示没有“mode:”字段)
go test -coverprofile=covprofile
  • sonar的项目配置文件sonar-project.properties中添加如下配置:
sonar.go.coverage.reportPaths=xx/xx/xx

静态扫描

  • 通过golang的扫描工具go vet生成报告(见代码检测工具-golang测试工具)
  • 报告需要直接使用终端报告
go vet -n xxx 2> report.out
  • sonar的项目配置文件sonar-project.properties中添加如下配置:
sonar.go.govet.reportPaths=xx/xx/xx

外部规则

golint

  • 通过golint生成覆盖率统计报告(见代码检测工具-golang测试工具)
  • 报告必须直接使用终端报告
golint xx/xx > golint
  • sonar的项目配置文件sonar-project.properties中添加如下配置:
sonar.go.golint.reportPaths=xx/xx/xx

gometalinter

  • 通过gometalinter生成覆盖率统计报告(见代码检测工具-golang测试工具)
  • 报告必须使用终端报告,不可以使用转化的xml报告(亲测可以读取报告但是sonar项目中并无展示任何相关数据)
gometalinter xx/xx > gometalinter
  • sonar的项目配置文件sonar-project.properties中添加如下配置:
sonar.go.gometalinter.reportPaths=xx/xx/xx
  • 其实这些配置也可以直接在sonar管理端配置,但是为了实现’sonarqube做成服务器,使用各机器安装sonar-scanner扩展使用‘所以强烈推荐这个配置写在配置文件中

配置样例展示

sonar.projectKey=gpcore
sonar.projectName=gpcore
sonar.sources=gpcore
sonar.exclusions=**/*_test.go,**/vendor/**
sonar.tests=
sonar.test.inclusions=**/**_test.go
sonar.test.exclusions=**/vendor/**
sonar.go.coverage.reportPaths=report/coverage.out
sonar.go.tests.reportPaths=report/test.json
sonar.go.govet.reportPaths=report/govet-report.out
sonar.go.gometalinter.reportPaths=report/gometalinter-report.out
sonar.go.golint.reportPaths=report/golint-report.out