系列目录
SonarQube 系列之 — 01 安装和扫描
SonarQube 系列之 — 02 配置与管理
SonarQube 系列之 — 03 集成CI
SonarQube 系列之 — 04 插件扩展
一、sonar简介
SonarQube(简称Sonar)是管理代码质量的开放平台,它可以快速地对代码质量进行分析,并给出合理的解决方案,提高管理效率,保证代码质量。支持Java, Python, C#, JavaScript, PHP, VB.NET, TypeScript, Flex等等二十几种编程语言的代码质量管理与检测。 SonarQube可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。官网,文档
- a. Web 服务器
- b. 基于 Elasticsearch 的搜索服务器
- c. 计算引擎服务器负责处理代码分析报告并保存在 SonarQube 数据库
Sonar Scanners:是用于将项目发布到Sonar进行审查的工具。也可以不用该工具。官网
SonarLint:是Eclipse,IDEA中的Sonar插件
SonarQube工作流程如上图:
- 开发人员在本地使用 SonarLint 运行分析 IDEs 上的代码;
- 开发者将自己的代码上传到持续集成服务器上,例如:git,SVN,TFVC,……;
- 持续集成服务器触发自动构建,SonarQube 扫描仪执行代码分析;
- 分析报告发送到 SonarQube 服务器进行处理;
- SonarQube 服务器分析和存储分析报告结果到 SonarQube 数据库中,并显示结果在 UI 界面中;
- 开发人员通过修改、评审代码来管理和减少他们 SonarQube UI 页面上的问题;
- 项目经理收到分析报告
运维使用 api 来从 SonarQube 自动化配置和提取数据
运维使用 JMX 监控 SonarQube 服务器
二、部署安装
1. 环境准备
-
jdk 1.8版本
-
sonarqube 7.6 downloads
-
SonarQube+Scanner downloads
-
数据库,Sonarqube支持Mysql、PostgreSQL,SqlServer、Oracle等,选择合适的数据库,创建相应sonar库,设置用户名、密码,设置用utf-8编码
2. 安装包解压,并修改配置文件
将安装包上传到服务器,并且解压到/data目录下:
#cd /data
#unzip sonarqube-7.6.zip -d /data/sonarqube
#cd /data/sonarqube/sonarqube-7.6/conf
#vi sonar.properties
修改:数据库配置,以及数据库用户名,密码,这里用的数据库是PostgreSQL,具体内容如下
3. 启动Sonar,并验证
chmod -R 755 /data/sonarqube/sonarqube-7.6/
cd /data/sonarqube/sonarqube-7.6/bin/linux-x86-64
./sonar.sh start
#如果未完成启动可以使用console命令查看启动过程中的问题
./sonar.sh console
#sonar支持的启动参数: console | start | stop | restart | status | dump
#如果启动完成,但是依然不能访问,可以通过以下命令查看启动日志
cat $SONAR_HOME/logs/web.log
浏览器访问:http://localhost:9000(管理员:admin,密码:admin)。如访问失败,则可以在 ../logs/sonar.log 文件中查看日志。
4. 常用插件安装,汉化包Plugin Library
- 常用插件
Chinese Pack -- 中文语言包,有兼容列表说明,这里是:sonar-l10n-zh-plugin-1.26.jar
JaCoCo -- Java 代码覆盖率
PMD -- Java 静态代码扫描
Checkstyle -- Java 代码规范检查
Crowd -- Crowd 插件,实现统一登录
ShellCheck Analyzer -- Shell 代码规范检查
SonarCSS、SonarHTML、SonarJS等 -- Sonar 针对不同编程语言代码分析
可百度云下载,链接:https://pan.baidu.com/s/1LhI_aoL0ZBXFAeVTBOqVDQ ,提取码:wlzj
-
放入sonar如下目录: sonarqube-7.6\extensions\plugins
-
然后重启sonar就可以了。
其他补充
安装服务
如果是windows机器,可以打开 StartSonar.bat 文件所在目录,运行文件 InstallNTService.bat 将Sonar安装为服务
找回sonarqube管理员密码、
update users set crypted_password = '$2a$12$uCkkXmhW5ThVK8mpBvnXOOJRLd64LJeHTeCkSuB3lfaR2N0AYBaSi', salt=null, hash_method='BCRYPT' where login = 'admin'
三、SonarQube的扫描
从官网可以看到,SonarQube支持以下方式来进行项目的扫描;
1. 直接使用SonarQube scanner即扫描仪来进行分析
如果本地未搭建开发环境,此时使用SonarQube scanner就很方便
-
修改配置文件
在sonar-scanner.properties中配置对应的sonar.host.url 、sonar.sourceEncoding -
修改环境变量
export SCAN_HOME=/data/sonarqube/sonar-scanner
export PATH=$PATH:$SCAN_HOME/bin -
修改项目配置文件
在项目根路径下创建sonar-project.properties、配置信息如下:
sonar.projectKey=sonarScannerTest
sonar.projectName=sonarScannerTest
sonar.version=1.0
sonar.sources=src
sonar.binaries=bin
sonar.language=java
sonar.sourceEncoding=UTF-8
- 执行和查看
在项目根目录下执行命令,执行sonar-scanner/sonar-scanner -X命令
执行成功的话,访问SonarQube查看项目扫描结果。
2. 使用SonarQube扫描仪分析Maven
- 找到位置 $MAVEN_HOME/conf下的settings.xml,添加如下配置:
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>http://loaclhost:9000</sonar.host.url>
<!-- 具有执行分析权限的用户名和密码 -->
<sonar.login>analysis</sonar.login>
<sonar.password>123456</sonar.password>
</properties>
</profile>
</profiles>
</settings>
注意:直接加进去会报错,将<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>添加到文件原有的<pluginGroups></pluginGroups>中,将
-
运行编辑器的命令窗口,在项目根目录下执行:
mvn clean verify sonar:sonar
或者
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.0.1398:sonar -Dsonar.scm.provider=git -
执行成功的话,访问SonarQube查看项目扫描结果。
遇到报错:SCM provider autodetection failed. Both svn and git claim to support this project. Please use sonar.scm.provider to define SCM of your project.
在命令中添加参数 -Dsonar.scm.provider=git就好啦~
3. 使用SonarQube扫描仪分析ant
- 下载sonarqube-antjar包,放到ant的/lib目录下,在项目的build.xml中添加一个 sonar Ant target:
<!-- build.xml -->
<project name="My Project" default="all" basedir="." xmlns:sonar="antlib:org.sonar.ant">
...
<!-- Define the SonarQube global properties (the most usual way is to pass these properties via the command line) -->
<property name="sonar.host.url" value="http://localhost:9000" />
<!-- Define the SonarQube project properties -->
<property name="sonar.projectKey" value="org.sonarqube:sonarqube-scanner-ant" />
<property name="sonar.projectName" value="Example of SonarScanner for Ant Usage" />
<property name="sonar.projectVersion" value="1.0" />
<property name="sonar.sources" value="src" />
<property name="sonar.java.binaries" value="build" />
<property name="sonar.java.libraries" value="lib/*.jar" />
...
<!-- Define SonarScanner for Ant Target -->
<target name="sonar">
<taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
<!-- Update the following line, or put the "sonarqube-ant-task-*.jar" file in your "$HOME/.ant/lib" folder -->
<classpath path="path/to/sonar/ant/task/lib/sonarqube-ant-task-*.jar" />
</taskdef>
<!-- Execute SonarScanner for Ant Analysis -->
<sonar:sonar />
</target>
-
在项目根目录下执行如下命令
ant sonar -
执行成功的话,访问SonarQube查看项目扫描结果。
4. 其他类型
使用SonarQube扫描仪分析Gradle
配置 gradle 全局属性~/.gradle/gradle.properties.
systemProp.sonar.host.url=http://localhost:9000
gradle clean compileJava sonarqube -x test -Dsonar.projectKey=[my analysis token] -Dsonar.java.binaries=[basedir]
sonar.java.binaries 等属性也可配置在项目的 build.gradle 或构建机器的 gradle.properties 里。
详见官方文档:
maven:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Maven
gradle:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Gradle
使用SonarQube扫描仪分析MSBuild
使用SonarQube扫描仪分析Azure DevOps
没用过,待补充
5. Eclipse+ SonarLint插件(连接到SonarQube平台)
- 打开Eclipse,选择Help->Eclipse Marketplace,在Find里面输入SonarQube,点击install
- 在SonarQube平台新建项目
- 在项目上右键—> Run as—>Run configuration—>Maven Build 下面新建 sonar:sonar