目录

  • 下载sonarqube安装包
  • java环境依赖
  • 再次尝试启动 sonarqube
  • 安装sonarscanner
  • 统计单元测试覆盖率
  • 在127.0.0.1:9000中查看代码覆盖率 Coverage


下载sonarqube安装包

从官网 https://docs.sonarqube.org/latest/setup/get-started-2-minutes/ 下载 安装包,选择From the zip file 安装sonarqube,按照指引1,2,3步,尝试启动,一般情况下第一次是启动不起来的,看一下启动日志,通常是缺少java环境导致,所以继续安装java。

sonarqube Jenkins插件 sonarqube java_golang

java环境依赖

继续阅读官网文档https://docs.sonarqube.org/latest/requirements/requirements/ 找到环境依赖部分, 发现环境依赖sonarqube和scanner共同依赖的是 11版本,这里我选择了 OpenJDK 11,(数据库默认是内置的H2,这里不再另外配置)。
安装openjdk11 并配置环境变量。https://jdk.java.net/java-se-ri/11 选择对应版本下载压缩文件,解压到相应目录。配置环境变量 sudo vim /etc/profile在文件最后添加如下内容

export JAVA_HOME=/openjdk-11+28_linux-x64_bin/jdk-11
export CLASSPATH=.:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin

命令行执行 java -version 输入如下内容表示成功

openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
再次尝试启动 sonarqube

出现如下内容时启动成功。

jvm 1    | 2021.03.22 17:24:20 INFO  app[][o.s.a.SchedulerImpl] Process[ce] is up
jvm 1    | 2021.03.22 17:24:20 INFO  app[][o.s.a.SchedulerImpl] SonarQube is up

访问 127.0.0.1:9000 默认用户名密码admin admin 登陆成功,然后在Administration–>Security中 生成用户token并记录下来 配置到系统环境变量中

export SONAR_TOKEN=178f14927e9f32a140586a*********

sonarqube Jenkins插件 sonarqube java_sonarqube_02

安装sonarscanner

https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/ 选择对应版本下载,这里我选linux 64-bit压缩文件,然后在工程根目录下添加文件:sonar-project.properties(这一步可选),主要目的是有这一行内容

# must be unique in a given SonarQube instance
sonar.projectKey=my:project

由于我下载的是压缩文件类型,所以按文档 Running SonarScanner from the zip file 的内容尝试执行sonar-scanner.

sonarqube Jenkins插件 sonarqube java_sonarqube Jenkins插件_03

先解压文件,然后确认配置文件conf/sonar-scanner.properties 中的sonarqube server是指向了本地(这个默认就是本地,可以跳过)
然后配置软链接到 /usr/local/bin 目录下以使可以在任何目录下执行sonar-scanner命令,等同于配置环境变量PATH,因为你执行 echo $PATH 会发现path路径第一条就是 /usr/local/bin 所以把程序可执行文件链接到 /usr/local/bin就等于实现了path配置。

ln -s 目标文件 /usr/local/bin

在命令执行 sonar-scanner -h 看到如下输出表示sonar-scanner安装成功

usage: sonar-scanner [options]

Options:
 -D,--define <arg>     Define property
 -h,--help             Display help information
 -v,--version          Display version information
 -X,--debug            Produce execution debug output

然后在项目目录下执行 sonar-scanner -Dsonar.login=SONAR_TOKEN 查看代码分析结果,这里的 SONAR_TOKEN 就是在第4步配置的环境变量

统计单元测试覆盖率

在项目根目录下执行

go test --count=1 -coverprofile=coverage.out -json ./... > report.json

–count=1 : 通过使用一个不在“可缓存参数”集合中的参数来禁用缓存

sonar-scanner -Dsonar.projectKey=webgoclient  -Dsonar.inclusions=**/*.go -Dsonar.exclusions=**/*_test.go -Dsonar.go.coverage.reportPaths=coverage.out -Dsonar.go.tests.reportPaths=report.json -Dsonar.login=$SONAR_TOKEN

命令行带参数 -Dsonar.projectKey=projectKey 的话就可以不用增加第5步的sonar-project.properties文件,保证 projectKey唯一即可。查看命令执行详情可能会出现 WARN: Failed to find test file for package 这类的警报,这个暂时没法解决,选择忽略。

在127.0.0.1:9000中查看代码覆盖率 Coverage

sonarqube Jenkins插件 sonarqube java_golang_04