目标
本文主要通过本地启动 SonarQube 服务,执行代码分析后,用 SonarScanner 将结果上传至SonarQube Server,以便在Web界面查看管理。
介绍
SonarQube是一个开源的代码质量管理平台,用于持续代码库检查的自管理静态分析工具。
SonarQube包含三部分,包括 SonarQube cloud、SonarQube server 和 SonarQube ide。
SonarQube cloud:适用于 CI/CD 工作流程的基于云的静态分析工具
SonarQube server :用于持续代码库检查的自管理静态分析工具
SonarQube ide:免费的 IDE 扩展,提供即时分析和编码指导
本地启动 SonarQube 服务,首先我们要先了解下 SonarQube server 和 SonarScanner 内容。
SonarQube Server - 是SonarQube平台的核心组件,它负责处理代码分析请求、存储分析结果、提供Web界面供用户查看和管理代码质量报告。
- SonarQube Server通常作为Web应用程序运行,用户可以通过浏览器访问其Web界面。
- 它需要连接到数据库(如PostgreSQL、MySQL等)来存储分析结果和配置信息。
SonarScanner - 是SonarQube的官方扫描工具,用于执行代码分析任务。
- 使用SonarQube Server提供的分析规则对代码进行分析。分析完成后,SonarScanner将结果上传到SonarQube Server,以便在Web界面上查看和管理。
- SonarScanner通常作为命令行工具运行,用户可以在项目的根目录下执行它。
- 在执行之前,用户需要在项目中配置SonarQube Scanner的相关属性,如SonarQube Server的地址、项目密钥等。
SonarQube Server负责提供Web界面和存储分析结果,而SonarScanner则负责执行代码分析任务并将结果上传到服务器。两者相互配合,使得SonarQube平台能够高效地帮助开发团队提高代码质量和安全性。
安装
安装 SonarQube 服务器的本地实例,有两种方案,可以使用zip文件的传统安装方式,也可以使用Docker镜像来启动 Docker 容器,本文通过 ZIP 文件进行的服务器安装(官方的安装要求需要依赖java环境)。
java
Java Downloads | Oracle 进入这个连接,选择自己的操作系统去安装 java 即可,安装成功后,需要配置环境变量,直到在命令行输入 java --version 显示版本信息配置完成。这里我安装的是 java17 的版本。
SonarQube server
Download SonarQube | Sonar 进入这个链接,下滑到下面可以看到LTA长期稳定版本 SonarQube 9.9.8 LTA 下载的社区版本(Community Build)。解压之后进进入bin目录可以看到有对应操作系统的启动文件,这里我们使用的是mac进入 macosx-universal-64 执行 soanr.sh文件,控制台会出现如下提醒 Usage: ./sonar.sh { console | start | stop | force-stop | restart | status | dump } 可以看到括号体内的一些参数,就是常用的命令启动、停止、重启等。
运行 ./sonar.sh start 启动sonarqube的前端服务,稍等几分钟之后就可以在浏览器输入:http://localhost:9000 默认账号和密码均为admin。
SonarScanner
SonarScanner 进入到这个链接,我们选择4.8版本进行安装(具体的版本你根据你当前安装的java版本找到对应支持的就OK)
下载完zip包后解压开,配置 config/sonar-scanner.propertie
sonar.host.url=http://172.16.192.15:9000
sonar.login=admin
sonar.password=admin # 这里首次登录web之后会强制要求修改密码,使用修改后的密码
配置环境变量(SonarScanner我本机存放的地址为/usr/local/sonar-scanner)
# sonar-scanner
export SONAR_SCANNER_HOME=/usr/local/sonar-scanner
export PATH=$SONAR_SCANNER_HOME/bin:$PATH
最后,你可以通过在终端输入 sonar-scanner 来验证是否成功设置了环境变量。如果命令能够被识别并显示帮助信息,说明配置成功。 这样设置之后,你就可以在任何终端窗口直接使用 sonar-scanner 命令,而不需要每次都指定它的完整路径了。
执行分析
进入需要静态代码分析的前端项目,添加当前项目的soanr配置 sonar-scanner.propertie
sonar.projectKey=myApp
sonar.projectName=myApp
sonar.projectVersion=v1
sonar.language=JavaScript
sonar.exclusions=**/node_modules/**/*
然后配置package.json
{
"scripts": {
"sonar": "sonar-scanner"
}
}
# 执行相关命令
npm run sonar
#or
yarn sonar
#or
pnpm sonar
检测完成之后再次访问http://localhost:9000进入就能看到myApp这个项目的检测结果了。