一、SonarQube是什么?
SonarQube是一种自我管理的自动代码审查工具,可以系统地帮助您交付干净的代码。作为我们Sonar 解决方案的核心元素 ,SonarQube 集成到您现有的工作流程中并检测代码中的问题,以帮助您对项目执行持续的代码检查。该工具可分析 30 多种不同的编程语言 ,并集成到您的 CI 管道 和 DevOps 平台中 ,以确保您的代码符合高质量标准。
二、SonarQube 实例包含三个组件::
- SonarScanner:扫描器,负责将源文件进行代码分析,并将分析后的报告发送给SonarQube服务器
- SonarQube Server:SonarQube服务器,负责处理分析报告,后台管理等
- Database server:数据库服务器,负责存储数据
三 、安装
1. Java 环境
$~ java -version
java version "11.0.2" 2019-01-15 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)
2. SonarQube 镜像下载
$> docker pull sonarqube
$> docker volume create --name sonarqube_data
$> docker volume create --name sonarqube_logs
$> docker volume create --name sonarqube_extensions
$> docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
您现在可以通过 http://localhost:9000 浏览 SonarQube (默认系统管理员凭据是 admin/ admin)
3. 安装中文插件
3.1 在线安装 (需点击 I understand the risk)
3.2 手动安装
1.sonar-|10n-zh-plugin。该版本需要与您的 SonarQube 版本兼容。
2.将下载的 jar 放入 中 <SONARQUBE_HOME>/extensions/plugins,并删除相同插件的所有以前版本。
3.重新启动您的 SonarQube 服务器。
四、搭建项目
1. 选择手动创建项目,根据提示一步步去创建项目...
2. 接下来要生成Token, 并且最好是把生成token事先保存下来:
Plain Text |
3. 然后选择配置选项,选择项目构建技术, 选选择当前系统环境
4. 根据提示下载并安装 SonarScanner
5. 下载后解压重命名后拷贝到 /usr/local/ 目录下,并设置环境变量
$ vi ~/.bash_profileexport SONAR_RUNNER_HOME=/usr/local/sonar-scannerexport
PATH=$PATH:$SONAR_RUNNER_HOME/bin$ source ~/.bash_profile
6. 设置好以后,通过以下方式验证一下,看到如下信息就表示设置成功
~ sonar-scanner -v
INFO: Scanner configuration file: /usr/local/Cellar/sonar-scanner/4.8.0.2856/libexec/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarScanner 4.8.0.2856
INFO: Java 11.0.17 Homebrew (64-bit)
INFO: Mac OS X 13.4.1 x86_64
7. 修改sonar-scanner文件夹下的 conf/sonar-scanner.properties配置文件,打开以下两行代码注释,后保存
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
五、扫描项目
1. 进入到项目要目录执行以下命令
sonar-scanner \-Dsonar.projectKey=test-project \-Dsonar.sources=. \-Dsonar.host.url=http://localhost:9000 \-Dsonar.login=sqp_603a34460857921938f47eb9e11757d821a9d6c2
或 在项目根目录创建 sonar-project.properties文件:
// Properties
# 本地自己起的sonarqube服务地址
sonar.host.url=http://127.0.0.1:9000/
# Sonar 令牌
sonar.login=sqp_603a34460857921938f47eb9e11757d821a9d6c2
# Sonar项目标识,在 SonarQube实例下必须唯一
sonar.projectKey=test-project
sonar.projectName=test-project# 项目版本
sonar.projectVersion=1.4.0
# 代码文件的编码
sonar.sourceEncoding=UTF-8
# 项目代码与 sonar-project.properties 文件的相对路径
sonar.sources=./src
# 排除不参与代码分析的文件或目录
sonar.exclusions=/node_modules/
sonar.tests=./src
sonar.test.inclusions=**/*.spec.ts
2. 运行sonar-scanner命令,看到类似以下输出就说明扫描成功~
3. 刷新 http://localhost:9000 查看报告
六、高级进阶
- 更换数据库,如PostgreSQL、MySQL...
- GitLab integration
- GitLab 关联 SonarQube 实现CI/CD代码扫描
- SonarQube结合GitLab CI/CD自动检测Push和Merge Request的增量代码质量
- SonarQube集成gitlab/jenkins
七、补充
1. SonarQube 和 eslint 区别
- ESLint:它主要用于JavaScript和TypeScript代码的Linting(即语法检查和代码风格检查)。ESLint是一个可扩展的工具,允许你自定义规则,以适应特定的编码风格和规范。ESLint的重点是实时反馈,它可以轻松集成到IDE和编辑器中,通常用于开发过程中。
- SonarQube:它是一个多语言的代码质量检查工具,支持包括Java,C#,JavaScript,TypeScript在内的30多种语言。SonarQube不仅检查语法错误和代码风格,还分析代码的复杂性,检测可能的漏洞,做代码覆盖率统计等。它的主要目标是长期的代码质量跟踪和管理,通常在CI/CD流水线中使用。
简单来说,ESLint主要用于JavaScript/TypeScript的语法和风格检查,强调的是实时反馈;而SonarQube是一种多语言支持,更全面的代码质量管理工具,强调的是代码质量的长期跟踪和管理。
参考文档:
- Docs SonarQube
- macOS sonar-scanner环境搭建
- SonarQube代码质量检查平台
其他类似工具:
- DeepSource
- DeepScan