1.简介.
官方文档:https://docs.sonarqube.org/latest/
Sonarqube是一种自动代码审查工具,用于检测代码中的错误、漏洞和代码异味。它可以与现有的工作流程集成,以支持跨项目分支和拉取请求的持续代码检查。有益于培养逻辑清晰,可读性强,健壮的代码。
包括一个C/S架构的服务端,主要功能:代码检测规则管理,代码检测报告管理,访问权限管理。
包括为其他软件集成的插件工具:SonarLint与Idea配合提供实时代码检测功能。Jenkins插件提供CI与代码检测功能流程化。PDF插件提供检测报告的输出存档。
2.系统架构.
一个典型的开发过程中:
1. 开发人员在 IDE 中开发和合并代码,使用SonarLint在编辑器中接收即时反馈,并将他们的代码签入他们的 DevOps 平台。
2. 组织的持续集成 (CI) 工具检查、构建和运行单元测试,集成的 SonarQube 扫描仪分析结果。
3. 扫描器将结果发布到 SonarQube 服务器,该服务器通过 SonarQube 界面、电子邮件、IDE 内通知(通过 SonarLint)以及对拉取或合并请求的修饰(使用Developer Edition及更高版本时)向开发人员提供反馈。
3.SonarQube安装指引.
准备工作:
SonarQube 7.5 —> 下载链接: https://pan.baidu.com/s/1N5PmODifYwk97DEB5sm2ag?pwd=jhtd 提取码: jhtd中文插件sonar-l10n-zh-plugin-1.25.jar(可选) —> 下载链接: https://pan.baidu.com/s/1N5PmODifYwk97DEB5sm2ag?pwd=jhtd 提取码: jhtdPDF输出报告插件sonar-pdfreport-plugin-3.0.3.jar(可选,需要导出PDF结果报告则添加) —> 下载链接: https://pan.baidu.com/s/1N5PmODifYwk97DEB5sm2ag?pwd=jhtd 提取码: jhtdmysql 5.6~8.0jdk8
注意:为什么要选择如上版本搭配?
①SonarQube高版本不支持mysql数据库,而我们公司基本不使用其他数据库。所以选择低于或等于7.7版本。②PDF插件支持到7.5版本,暂时没找到最新版本。所以选择7.5版本。③需要注意JDK版本,SonarQube对jdk版本有要求,可看官方文档。
1. 下载SonarQube:
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.5.zip
2. 解压zip包至当前目录:
unzip sonarqube-7.5.zip
3. 下载中文插件sonar-l10n-zh-plugin-1.25.jar(可选,需要中文界面则添加)
将插件移动至目录./sonarqube-7.5/extensions/plugins下
4.下载PDF输出报告插件sonar-pdfreport-plugin-3.0.3.jar(可选,需要导出PDF结果报告则添加)
将插件移动至目录./sonarqube-7.5/extensions/plugins下
5.修改配置文件 ./sonarqube-7.5/conf/sonar.properties,如下:主要修改数据库配置:
注意:要提前在数据库实例上建库[sonar]
sonar.jdbc.username=用户名sonar.jdbc.password=密码sonar.jdbc.url=jdbc:mysql://主机ip地址:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
6.修改配置文件./sonarqube-7.5/conf/wrapper.conf,如下:主要修改jdk配置
通过如下命令查询jdk安装路径:
whereis javals -lrt /usr/bin/javals -lrt /etc/alternatives/java
将获取到的jdk安装路径配置至wrapper.conf
7.启动sonarqube服务:
注意:不能使用root用户启动,需要自建用户启动,因为启动时会启动es组件,而es组件要求不能以root用户身份启动。(示例使用jumpuser启动,需要将sonarqube的所有文件的所属都改为jumpuser,使用命令:
chown -R jumpuser:jumpuser sonarqube-7.7
启动:
./bin/linux-x86-64/sonar.sh start
查看日志:
tail -300f ./logs/sonar.log
发现SonarQube is up 表示启动成功了!!!
8.通过浏览器访问SonarQube服务:
注意:访问失败请排查进程和端口9000是否正常监听,之后排查防火墙和安全组策略,日志正常却访问不了应该是防火墙或安全组问题。
地址:http://host:9000/
默认账号:admin
默认密码:admin
9.SonarQube服务的PDF报告输出插件的相关配置:
如下配置:
SonarQube服务的配置就此结束了,至于规则相关的管理不在该文档范围!
4.SonarQube集成Jenkins.
准备工作:
Jenkins 2.327SonarQube Scanner for JenkinsVersion 2.14 插件安装CodeSonar PluginVersion 2.1.0 插件安装
1.Jenkins上配置SonarQube Server信息:
配置如下:
2.Jenkins上配置SonarQube Scanner工具信息:
配置如下:
3.Jenkins中job构建步骤中配置SonarQube Scanner扫描:
点击配置按钮
配置如下:
sonar.host.url=http://host:9000 --> sonarQube服务地址端口sonar.login=admin --> sonarQube登录账号sonar.password=admin --> sonarQube登录密码sonar.projectKey=构建的项目 -->构建的项目IDsonar.projectName=构建的项目名 -->构建的项目名sonar.projectVersion=1.0.0 -->构建的项目版本sonar.language=java -->语言sonar.java.binaries=$WORKSPACE/构建的项目/build/libs/ -->构建的jar包地址sonar.sources=$WORKSPACE/构建的项目 -->构建的源代码地址sonar.pdf.password=admin -->SonarQube的PDF插件设置的账号sonar.pdf.username=admin -->SonarQube的PDF插件设置的密码
4.Jenkins中job进行构建,如下为控制台打印日志:
5.SonarQube中查看检测报告:
6.SonarQube中下载PDF报告:
如下下载:
注意:由于在第3步中配置的
sonar.host.url=http://host:9000该配置,导致下载地址有问题,需要手动修改下载地址才能下载PDF文件(暂未找到解决方法),解决方式如下图:
最终的访问地址为(端口号之后补上/):
http://host:9000api/pdfreport/get?componentKey=项目ID -> http://host:9000/api/pdfreport/get?componentKey=项目ID
5.SonarQube集成SonarLint.
准备工作:
IntelliJ IDEA 2019.2 x64SonarLint 4.14.2.283 插件
1.安装SonarLint插件:
如下:
2.去Sonarqube上生成认证Token:
3.配置SonarLint:
4. 填写认证Token
点击OK完成设置
5.查看SonarLint自动检测效果:
6.使用SonarLint手动检测代码:
查看报告:
7.手动同步SonarQube的检测规则: