# SonarQube代码质量管理
# SonarQube
> [SonarQube](http://www.sonarqube.org/)是一个自动代码审查工具,可检测代码中的错误、漏洞和代码异味,几乎支持所有语言,还有强大的插件机制。它可以与现有的工作流程CI集成,以实现跨项目分支和请求的持续代码检查。
## 安装
> 注意!SonarQube最新版本已不再支持JDK8和MySQL数据库持久化,若使用的JDK8请安装≤7.8.0版本
* 下载[https://www.sonarqube.org/downloads/](https://www.sonarqube.org/downloads/)
* JDK8需要安装≤7.8.0版本,下载页面末尾找到`Historical Downloads-Show all versions`下载历史版本
* 解压下载包,进入`bin/对应具体操作系统`目录,执行`./sonar.sh start`启动,到`logs`目录可查看日志
* 其他命令`./sonar.sh stop(停止) | force-stop(强制停止) | restart (重启)| status (查看状态)`
* 日志文件`sonar.log`末尾打印`SonarQube is up`说明启动成功,默认9000端口,访问[http://127.0.0.1:9000](http://127.0.0.1:9000/),默认账户密码`admin/admin`
### 生产环境数据库安装-搭建PostgreSQL
> SonarQube默认使用了基于内存的数据库,本地直接使用即可。生产环境下建议需安装官方支持的三种数据库`PostgreSQL【推荐】、Oracle、SQL Server`之一
* 简单起见,以下演示使用Docker搭建PostgreSQL,数据库连接地址、账号、密码根据需求自行修改
~~~
version: '3.1'
services:
postgres:
image: postgres:10
restart: always
environment:
- POSTGRES_USER=Tceon-PERFOOT
- POSTGRES_PASSWORD=Tceon-PERFOOT
- POSTGRES_DB=sonar
ports:
- "5432:5432"
~~~
* 修改SonarQube配置
* 修改配置文件:`sonarqube-7.8/conf/sonar.properties`
~~~
# By default the schema named "public" is used. It can be overridden with the parameter "currentSchema".
#sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube?currentSchema=my_schema
# 添加配置你的数据库连接配置
sonar.jdbc.url=jdbc:postgresql://localhost/sonar?currentSchema=public
sonar.jdbc.username=Tceon-PERFOOT
sonar.jdbc.password=Tceon-PERFOOT
~~~
* 执行`./sonar.sh restart`,重启SonarQube。观察PostgreSQL,可以发现,此时SonarQube会自动在PostgreSQL数据库中建表并插入初始化数据。
## 插件
### 中文插件安装
* 可到`配置/Administration-插件市场Marketspace`搜索`Chinese Pack`安装中文插件
![](https://ooo.0o0.ooo/2020/05/29/X37i5ZftQdxjPuH.png)
* 网络问题下载过慢可直接到[https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases](https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases)下载对应版本jar文件,SonarQube7.8版本应使用1.28版本汉化包。将jar包放至`sonarqube-7.8/extensions/plugins`目录下重启服务即可
### 其他插件
* 当然你可以在插件市场中根据需求安装需要的插件,例如`Findbugs、PMD、CheckStyles`等都是常用的扫描插件
## 使用
* 在项目页面新建一个项目,根据提示输入令牌,选择项目类型,得到如下命令
![](https://s1.ax1x.com/2020/05/29/tK3SpR.png)
* 若忘记命令点击头像进入`我的账号-安全`配置生成新的令牌填入上述命令中
![](https://ooo.0o0.ooo/2020/05/29/bqrYnX78IjRp6QZ.png)
### 方式一【推荐】
* 复制上面的命令后在项目根目录下执行该命令即可
~~~
mvn sonar:sonar \
-Dsonar.projectKey=Tceon-PERFOOT \
-Dsonar.host.url=http://127.0.0.1:9000 \
-Dsonar.login=5cb24d222846d3127105debb3a7223721ed96c00
~~~
### 方式二
* 添加至Maven配置文件`apache-maven-3.6.3/conf/settings.xml`中的`<profiles>`标签下
~~~
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.jdbc.url>jdbc:postgresql://localhost/sonar?currentSchema=public</sonar.jdbc.url>
<sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver>
<sonar.jdbc.username>Tceon-PERFOOT </sonar.jdbc.username>
<sonar.jdbc.password>Tceon-PERFOOT </sonar.jdbc.password>
<sonar.host.url>http://127.0.0.1:9000</sonar.host.url>
</properties>
</profile>
~~~
* 到项目根目录下执行下方命令即可
~~~
mvn sonar:sonar -Dsonar.java.binaries=target/sonar
~~~
### 查看结果
* 扫描完毕刷新控制台页面查看结果报告,具体规则和质量阈值可自行配置
## 与CI集成
* 详见[官方文档](https://docs.sonarqube.org/latest/analysis/branch-pr-analysis-overview/)
- 前言版本&说明
- 概念
- Tceon-PERFOOT 是什么?
- 系统架构
- 主要使用的开源组件
- 角色控制访问权限(RBAC)
- 用户手册
- 系统配置
- 工作流使用配置
- 定时任务调度
- 项目本地运行
- 后端运行
- 前端运行
- 项目结构说明
- 附:使用Oracle等数据库
- 模块化版本
- 后端开发指南
- 基本开发指南
- 前后端数据交互标准
- 工具类及数据权限
- 代码生成器
- 增删改查CRUD
- 日志类型注解扩展
- 逻辑删除
- 各验证码使用及配置
- 前端开发指南
- 基本开发指南
- 主题/Logo/首页等配置
- 路由菜单配置
- 多语言国际化配置
- 自定义图标icon
- 工具类及数据获取
- 完整版开发指南
- 前端Vue代码生成器
- Activiti工作流
- 单点登录配置
- MinIO对象存储服务搭建
- 第三方社交账号配置
- 短信开发/站内消息/邮件
- Vaptcha验证码
- 禁用词使用
- Monaco代码编辑器
- 开放平台及单点登录
- 开放平台使用指南
- Web接入开发流程
- 单点登录开发指南
- 微信小程序端开发指南
- 项目导入与开发必读
- 通用方法工具类说明
- Uniapp端开发指南
- APP后端开发指南
- Uniapp前端开发指南
- 开发新功能示例
- 后端开发新模块
- 前端开发新页面
- 测试
- SonarQube代码质量管理
- TestNG单元测试
- ExtentReports测试报告
- Selenuim自动化Web测试
- Appuim自动化App测试
- JMeter压测性能测试
- 部署
- Spring Boot配置
- 快速部署
- 后端部署
- 前端部署
- 前端部署优化
- Docker容器化部署
- 服务器配置
- DevOps环境搭建
- 组件安装列表
- 开发设计规范
- 分支管理
- 数据库设计规范
- Redis使用规范
- Java基础开发规范
- Rest API规范
- 项目结构规范
- 前端开发规范
- 前端设计规范
- 项目搭建分享
- 后端相关
- SpringBoot 2.x区别总结
- Spring Security整合JWT
- Spring Security动态权限管理
- Spring Boot 2.x整合Quartz
- Spring Boot 2.x整合Websocket
- Spring Boot 2.x整合Activiti工作流以及模型设计器
- Spring Boot + Security全局跨域配置
- 前端相关
- axios请求封装 统一异常处理
- 动态路由菜单加载
- 多维度控制权限至按钮显示
- 发送消息图标红点实时显示
- 动态组件单页操作
- 常见问题