目录
- 下载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。
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*********
安装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.
先解压文件,然后确认配置文件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