简介
sonarQube 能干什么?
-
能够静态扫描和分析20+语言的项目代码;
-
有统一的管理平台,呈现项目代码的质量数据;
-
代码质量和安全扫描分析平台。
-
多维度分析代码:代码量,安全隐患,编写规范隐患,重复度,复杂度,代码增量,测试覆盖率等。
-
支持25+编程语言和代码扫描分析,包含java\python\C#\javascript\go\C++等
-
涵盖了编程语言的静态扫描规则:代码编写规范+安全规范。
-
能够与代码编辑器,CI/CD平台完美集成。
-
能够与SCM集成,可以直接在平台上看到代码问题是由哪位开发人员提交。
-
帮助程序员写出更干净,更安全的代码。
sonarQube 如何工作?
sonar静态代码扫描由2部分组成:sonarQube平台,sonar-scanner扫描器。
- sonarQube: web界面管理平台。
- 展示所有的项目代码的质量数据。
- 配置质量规则,管理项目,配置通知,配置SCM等。
- sonarScanner: 代码扫描工具。
- 专门用来扫描和分析项目代码。支持20+语言。
- 代码扫描和分析完成之后,会将扫描结果存储到数据库当中,在sonarQube平台可以看到扫描数据。
sonarQube 和 sonarScanner 之间的关系:
安装的内容
- sonarQube 平台
- 数据库(oracle,postgresql,sql,server)
- sonar-scanner
我的环境
- 操作系统:macos
- java: jdk17, (sonarQube依赖jdk)
- sonarQube: 10.6.x.xx
sonarQube 不同版本和区别:
我们下载的是社区版本的,体验下sonarQube;
sonarQube 平台搭建
我们下载的是社区免费版本的;
- 第1步:安装java的sdk,根据你要下载的sonarQube版本,安装对应的jdk版本,匹配关系如: 版本支持,具体的可查看文档:sonarQube Docs
| sonarQube | Server | Scanners | PostgreSQL | SQL Server | Oracle |
|---|---|---|---|---|---|
| 10.6 | Oracle JRE 17 Open JDK 17 | Oracle JRE 17 Open JDK 17 | 15 14 13 12 11 | 2022 2019 2017 2016 2014 | 21C 19C |
| 10.0 | Oracle JRE 17 Open JDK 17 | Oracle JRE 17 Open JDK 17 | 15 14 13 12 11 | 2022 2019 2017 2016 2014 | 21C 19C |
| 9.8 | Oracle JRE 17 Open JDK 17 | Oracle JRE 17 Open JDK 17 | 15 14 13 12 11 | 2019 2017 2016 2014 | 19C 18C 12C |
| 8.9 | Oracle JRE 11 Open JDK 11 | Oracle JRE 11 Open JDK 11 | 13 12 11 10 9.6 | 2019 2017 2016 2014 | 19C 18C 12C |
- 第1步: sonarQube官网下载,下载完成后是
.zip, 然后解压,我这边下载的sonarQube是10.6.x版本的,可以用jdk17,但是其他版本,例:sonarQueb-7.x.x 对应jdk8,sonarQube-9.x,对应jdk11;否则运行的时候会报错; - 第2步:根据当前的电脑的系统是window,macos等,选择目录:
bin/下对应的文件夹,进行启动 - window系统:进入目录文件夹
bin/windows-x86-66/找到StartSonar.bat,双击运行StartSonar.bat - macos系统:进入目录文件夹
bin/macosx-universal-64/找到sonar.sh,把这个文件拖入终端,然后运行命令,运行命令,例:
/Users/linwen/backend/ci-cd/sonarqube-10.6.0.92116/bin/macosx-universal-64/sonar.sh console;命令格式:(sonar.sh)所在路径+空格+console;网页打开:localhost:9999 ;默认登陆账号/密码: admin/admin
登陆后首次会要求修改密码:看到这个页面就完成了
sonarQube汉化
- 启动sonar.sh服务,启动命令,例:sonar.sh所在的目录 console,打开网页localhost:9000,默认账号/密码:admin/admin, 找到顶部菜单
Administration下的Marketplace,搜索Chinese:可能网络原因安装插件超时,如果安装插件报错,可手动尝试安装插件: 报错如下:
插件安装完成后,需要重启
数据库与sonarQube配置
PostgreSQL 安装请自行搜索安装;
为了方便sonarQueb的配置,我们需要PostgreSQL做2个配置:创建sonar用户 和 创建sonar数据库,然后在sonar的安装目录中 conf/sonar.properties 配置数据库连接;
-
PostgreSQL - 创建sonar用户;
打开 pgAdmin4,创建一个用户;Crreate,Login/Group Role设置账号
设置密码
设置权限信息(创建一个可以登陆的)
查看刚刚创建的sonar用户的信息
-
PostgreSQL - 创建sonar数据库; 创建数据库
测试使用sonar用户登陆,首先先断开服务,然后修改Properties修改属性:
断开服务
更改
Properties修改为使用sonar用户: -
在sonar的目录:
conf/sonar.properties中配置数据库连接; 找到sonar的目录下的conf/sonar.properties,用ide编辑器打开:在文件中,通过关键字搜索
PostgreSQL找到对应的数据库配置:
配置连接的用户名密码以及数据库信息:配置完成后,保存并重启sonarQube;重启需要等待一会,sonarQueb会在数据库下默认创建一些表信息:
之前未配置数据库,在localhost:9000中的页面底部会有提示:
注意:因为配置了数据库,在localhost:9000的页面中登陆时,原先admin账号/密码会被重置为默认账号和密码即:账号/密码( admin/admin);
配置了数据库,重启后,localhost:9000中的页面底部提示会消失:
sonar-scanner安装和配置
安装SonarQube平台后,就可以安装 scanner了。您必须安装和配置最适合您需求的 scanner,具体取决于您的构建工具。然后,在构建之后和执行任何归档或部署之前,您将通过调用CI管道中的扫描程序来开始对项目进行分析。scanner的安装和调用在相应扫描器的文档中有详细的说明;
安装使用SonarScanner 有两种方式:1. 可以根据项目的构建工具来选择合适的SonarScanner; 2.可以使用 SonarScanner CLI 的方式;
-
可以根据项目的构建工具,选择适合的 SonarScanner;
- Gradle - 适用于Gradle的SonarScanner
- .NET - SonarScanner for .NET
- Maven - 适用于Maven的SonarScanner
- Jenkins - Jenkins的SonarQube扩展
- Azure DevOps - Azure DevOps的SonarQube扩展
- Ant - SonarScanner for Ant(已弃用)
-
SonarScanner CLI 方式; 我们用的是这种方式;
- 下载对应的SonarScanner:
- 解压后,配置SonarScanner, 打开
conf/sonar-scanner.properties文件,配置服务地址以及登陆的账号和密码: - 把 sonarScanner 下的bin目录配置到环境变量中:
1.查看mac使用的环境变量是 bash 还是 zsh(默认);echo $SHELL;2.使用 vi,vim ~/.zshrc 或者
open ~/.zshrc打开,并添加sonar-scanner的环境变量;3.在命令行输入:sonar-scanner -h 确认环境变量是否可用;
- 下载对应的SonarScanner:
扫描前端项目(pigx-ui)
代码分析扫描参考文档analyzing-source-code
配置扫描的项目,可以通过根目录创建sonar-project-properties方式,也可以通过页面的方式进行配置,即(启动服务后的localhost:9000页面中创建项目的方式)
-
在项目的根目录中创建一个名为
sonar-project.properties的配置文件。sonar-project.properties文件内容示例: # must be unique in a given SonarQube instance sonar.projectKey=my:project# --- optional properties --- # defaults to project key #sonar.projectName=My project # defaults to 'not provided' #sonar.projectVersion=1.0 # Path is relative to the sonar-project.properties file. Defaults to . #sonar.sources=. # Encoding of the source code. Default is default system encoding #sonar.sourceEncoding=UTF-8sonar.projectKey: 在sonarQube上的实例键名(唯一);sonar.projectName: 在sonarQube上的项目名称;sonar.projectVersion: 项目版本号;sonar.sources: 源代码指定目录;sonar.sourceEncoding: 编码格式;sonar.language: 指定需要扫描的语言;sonar.java.binaries: java时(class文件的目录);
-
首先要开启sonarQube Server服务,然后在项目的跟目录下运行:
sonar-scanner,扫描项目; -
等待扫描完成,登陆sonarQube Server 平台 localhost:9000,查看
sonarLint与代码编辑器的集成
在webstorm中配置
- 在 webstorm 的插件中搜索安装
sonarLint 插件; - 启动sonarQube Serve 服务后,配置插件;
在webstorm中的settings,搜索 sonarLint 配置 sonarLint 服务:
配置 sonarQube 服务地址:
选择连接服务的身份验证的方式:
第1种:账号/密码的方式将要被移除,建议使用token方式;
第2种;使用token方式,首先要启动sonarQube服务;然后点击
Create Token;然后再点击这个"+";
- 扫描项目文件;
在代码的文件中右键中,就会多一个选项
Analyze with SonarList用SonarLint分析的选项;点击
Analyze with SonarLint会生成一个报告,根据提示进行完善代码;
其他
代码规则和质量配置,查看项目的复杂度指标,重复度指标,项目周期内活动轨迹等,可以启动sonarQube服务后,到对应的服务url上查看;