环境:win 10
sonarqube:7.9.4.35981
sonar-scanner:4.4.0.2170
java : 11.0.8
一.启动程序
打开[mark]sonar的目录->bin文件夹->windows-x86-64->StartSonar.bat[/mark]
sonarqube的默认web端口是9000,打开浏览器输入localhost:9000,输入账号密码(默认都是admin)
二.安装中文插件
Administration > Marketplace,搜索框输入Chinese,就可以找到中文插件Chinese Pack,安装后重启sonar服务器即可
三. 项目分析
- 创建项目,输入令牌,把生成的token复制下来哦,只会显示一次,
用户 > 我的账户 > 安全
中可以生成新token(令牌),或者回收已创建的 token。 - 选择要分析的项目开发语言
- 选择需要在什么环境下分析
- 复制生成的分析命令,在项目根目录cmd,粘贴即可运行,待success后在sonar上就可以看到结果
- 注意:需要将sonar.login=自己创建令牌生成的token
6.注意事项:在分析每种语言时可以选择“质量配置”,不选则是默认该语言内置的规则,但是有些规则其实是未激活的,这样的话是分析不出对应的bug;“质量阀”是控制此次分析是成功或失败,sonar有一个内置的,也可以自定义。
7. 在这个实际分析过程中我其实遇到了几个问题,还未解决:
7.1 分析项目是python,故意写了一个" "yield" and "return" should not be used outside functions" 的bug,使用python的内置规则,既然分析出无bug;查看(python)Sonar Way查看到该规则既然没有‘质量配置’;也没有找到哪里可以激活该规则
7.2 针对7.1 的现象,我复制了一份(python)Sonar Way,一模一样的;再分析,这个bug又出来了。。。。
7.3 还有另外一个规则"return" and "yield" should not be used in the same function,复制了一份(python)Sonar Way 既可以激活该规则,再分析,这个bug出来了,被统计到bug数里了
对于这几个问题,公司是使用的SonarQube 8.3版本,但是python分析器版本是一样的(2.8),我也不知道咋回事,准备再用最新的8.4版本的再试试
实验结果:
前提:sonar7.9+ SonarPython2.8 VS sonar8.4+SonarPython2.13
1. "yield" and "retur" should not be used outside functions"这个规则在sonarqube8.4上看到内置的sonar way是激活了的,且分析同一个项目,这个bug是统计出来了的,不需要做另外的规则激活
2. "return" and "yield" should not be used in the same function这个规则在sonarqube8.4的python 内置规则看到未被激活,分析同一个项目,此bug未被检查出来
3.由此我大胆得出之所以sonar7.9未检查出bug,而sonar8.4检查出,是因为每一种语言的不同规则是否被激活的原因,7.9中未被激活,所以未检查出,而8.4激活了该规则所以检查出来了(说白了就是python语言分析器版本的原因,每一个版本里面激活的规则不一样)
四. 项目分析配置文件
重新扫描只需要再次执行上面的命令。但是每次都执行这么长的命令很麻烦。还好扫描器是可以配置的。
只需要在要分析的目录下,创建一个文件sonar-project.properties
。内容如下:
# your authentication token sonar.login=[之前令牌生成的token] # must be unique in a given SonarQube instance sonar.projectKey=[项目key,也就是标识] # this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1. sonar.projectName=[项目名称] sonar.projectVersion=1.0 # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. # This property is optional if sonar.modules is set. # Comma-separated paths to directories containing source files. # 限定要分析的路径 sonar.sources=. # Encoding of the source code. Default is default system encoding sonar.sourceEncoding=UTF-8 # Set the language of the source code to analyze # 限定要分析的代码语言,比如py。 # 不设置则默认分析多种语言 sonar.language = py 关于扫描器更多的参数配置查看:Analysis Parameters。