代码安全平台 sonarqube
第一章 SonarQube简介
1.1 SonarQube介绍
Sonar 是一个用于代码质量管理的开源平台,用于管理源代码的质量
通过插件形式,可以支持包括 java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy,HTML,Python,PHP,XML等等二十几种编程语言的代码质量管理与检测
Sonar可以从以下七个维度检测代码质量
- 不遵循代码标准 sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规 范代码编写
- 潜在的缺陷 sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷
- 糟糕的复杂度分布 文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员 难以理解它们 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试
- 重复 显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示 源码中重复严重的地方
- 注释不足或者过多 没有注释将使代码可读性变差,特别是当不可避免地出现人员变动 时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷
- 缺乏单元测试 sonar可以很方便地统计并展示单元测试覆盖率
- 糟糕的设计
第二章 SonarQube的安装使用
2.1 SonarQube安装配置
2.1.1 下载
1.SonarQube服务端下载地址:https://www.sonarqube.org/downloads/; 文件下载完成后将文件解压到usr/local目录下,解压后的目录结构如下:
2.SonarQube客户端工具下载:http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zip 文件下载完成后将文件解压到usr/local目录下,解压后的目录结构如下:
3.中文补丁包下载地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh
2.1.2 SonarQube的环境变量的配置
1.vim ~/.bash_profile
export SONAR_HOME=/usr/local/sonarqube-5.6.6
export SONAR_RUNNER_HOME=/usr/local/sonar-runner-2.4
export PATH=$PATH:$SONAR_RUNNER_HOME/bin:$JAVA_8_HOME/bin
配置完成后环境变量生效
source ~/.bash_profile
试验:sonar-runner -v
2.3启动SonarQube
cd /usr/local/sonarqube-5.6.6/bin/macosx-universal-64
./sonar.sh start
查看启动日志:
tail -f /usr/local/sonarqube-5.6.6/logs/sonar.log
关闭命令:
./sonar.sh stop
登录:http://localhost:9000/sonarqube
默认密码:admin/admin
2.2 Jetbrains安装SonarQube插件
第三章 SonarQube使用
3.1 SonarLint
SonarLint可以连接到SonarQube服务器,下载服务器里面的规则。但是不能将分析结果上传到SonarQube
3.2 使用Jenkins+SonarQube
给Jenkins安装SonarQube Scanner插件,在“构建”步骤,增加SonarQube Scan环节即可。
3.3 毫末使用
3.3.1 后端项目(JeecgBackend项目模板已经配置)
# 1. 在http://sonar.haomo-tech.com中新增项目。新增项目时创建令牌,并指定项目为maven(或gradle)工程;
# 2. web中会提示类似下面的命令
mvn sonar:sonar \
-Dsonar.projectKey=JeecgBackend \
-Dsonar.host.url=http://sonar.haomo-tech.com \
-Dsonar.login=62f2e9377032dacf2cbd9e6edbf791ab5xxxxxx
可以在工程的sonar-project.properties中配置参数,示例如下:
sonar.language=java
sonar.projectKey=JeecgBackend
sonar.projectName=JeecgBackend
sonar.projectVersion=2.1.0s
sonar.sourceEncoding=UTF-8
sonar.sources=./jeecg-boot-module-system/src/main/java/
sonar.host.url=http://sonar.haomo-tech.com
sonar.java.binaries=./jeecg-boot-module-system/target/
sonar.login=62f2e9377032dacf2cbd9e6edbf791ab5xxxxxx
3.3.2 前端项目(JeecgWeb项目模板已经配置)
# 1. 在http://sonar.haomo-tech.com中新增项目。新增项目时创建令牌(或使用已有令牌),并指定项目为javascript/macos;
# 2. web中会提示类似下面的命令
sonar-scanner \
-Dsonar.projectKey=JeecgWeb \
-Dsonar.sources=. \
-Dsonar.host.url=http://sonar.haomo-tech.com \
-Dsonar.login=62f2e9377032dacf2cbd9e6edbf791ab5xxxxxx
# 3. 为了方便使用,我们在JeecgWeb中增加了sonar.sh和sonar-project.properties两个文件。执行sonar.sh即可
3.4 自定义规则
官方规则库:https://rules.sonarsource.com/
3.5 Sonarqube插件
推荐插件:FindBugs/CheckStyle/GitLab Auth/Git