SonarQube
一 SonarQube简介
1.1 sonar是一款静态代码质量分析工具,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,而且能够集成在IDE、Jenkins、Git等服务中,方便随时查看代码质量分析报告;
sonar通过配置的代码分析规则,从可靠性、安全性、可维护性、覆盖率、重复率等方面分析项目,风险等级从A~E划分为5个等级;
同时,sonar可以集成pmd、findbugs、checkstyle等插件来扩展使用其他规则来检验代码质量;
sonar设置了质量门,通过设置的质量门评定此次提交分析的项目代码是否达到了规定的要求;
1.2 sonar的组成
一个sonar项目主要有以下四个组件构成:
- 一台SonarQube Server启动3个主要过程:
- Web服务器,供开发人员,管理人员浏览高质量的快照并配置SonarQube实例
- 基于Elasticsearch的Search Server从UI进行后退搜索
- Compute Engine服务器,负责处理代码分析报告并将其保存在SonarQube数据库中
- 一个SonarQube数据库要存储:
- SonarQube实例的配置(安全性,插件设置等)
- 项目,视图等的质量快照。
- 服务器上安装了多个SonarQube插件,可能包括语言,SCM,集成,身份验证和管理插件
- 在构建/持续集成服务器上运行一个或多个SonarScanner,以分析项目;
1.3 工作流转
以下架构图为sonar项目的工作流转图
- 开发人员在其IDE中进行编码,并使用SonarLint运行本地分析。
- 开发人员将其代码推送到他们最喜欢的SCM中:git,SVN,TFVC等。
- Continuous Integration Server会触发自动构建,并执行运行SonarQube分析所需的SonarScanner。
- 分析报告将发送到SonarQube服务器进行处理。
- SonarQube Server处理分析报告结果并将其存储在SonarQube数据库中,并在UI中显示结果。
- 开发人员通过SonarQube UI审查,评论,挑战他们的问题,以管理和减少技术债务。
- 经理从分析中接收报告。Ops使用API自动执行配置并从SonarQube提取数据。运维人员使用JMX监视SonarQube Server。
二 IntelliJ IDEA 集成SonarLint
2.1 简介
SonarLint是sonar团队开发的用于IDE的开源插件,支持eclipse、idea、visual studio、VS code四款IDE工具,开发可以在IDE上直接执行SonarLint对项目代码进行分析,同时,分析报告也可以同步到SonarQube服务器上;
2.2 安装
在Preferences>Plugins中搜索sonarLint,可以搜索到该插件,点击install
2.3 使用
SonarLint可以针对项目执行,也可以直接针对单个文件进行分析,并在IDE下方的SonarLint中显示分析结果;
在项目上右键点击,下拉菜单中点击SonarLint,选择Analyze with SonarLint,这时会对整个项目内的文件进行分析;
在打开的单个文件中右键点击,出现如下菜单,点击Analyze with SonarLint,会对当前的单个文件进行分析;
三 Sonar系列之SonarQube安装配置
一、简介
SonarQube用于部署Web服务器,作为SonarQube Server使用,用于Sonar的配置管理、分析结果汇总展示;
SonarQube主要分为四大版本,我们使用的社区版,截止发文时间,已经更新到8.4版本,此次以社区版的7.8版本作为示例;
二、安装
环境要求:jdk1.8以上;
1 在官网下载相应版本的安装包
如果下载最新版本 直接点击下图中Download Community Edition
如果下载历史版本,点击最下方的show all versions
点击后,下载到本地一个相应版本的zip文件;
2 配置
unzip sonarqube-7.8.zip
mkdir /opt/sonar
mv sonarqube-7.8/* /opt/sonar
vi /opt/sonar/conf/sonar.properties
sonarqube自带H2数据库,方便用户学习使用,但是使用sonarqube作为服务器使用,需要配置单独的数据库使用;
sonarqube7.8版本支持MS SQLserver、Oracle、Postgresql、MySQL四种数据库,但是从7.8版本之后,sonarqube不再支持MySQL数据库
,
MySQL >=5.6 && <8.0
在sonarqube目录的conf下,sonar.properties文件为soanrqube的配置文件,配置相应的数据库信息;
在数据库中建立sonar数据库
重启sonarqube,启动成功后,我们查看数据库,可以看到在数据库中会生成的相关的表,如此sonar的数据库配置就完成了。
此外,我们可以自定义sonarqube的端口,在sonar.properties文件中配置sonar.web.port,重启sonarqube即可。
3 启动soanrqube
- 创建soanrqube用户
adduser sonar
chown -R sonar:sonar /opt/sonar
chown -R sonar:sonar /usr/java/jdk1.8.0_291-amd64
su sonar /opt/sonar/bin/linux-x86-64/./sonar.sh start
su sonar /opt/sonar/bin/linux-x86-64/./sonar.sh console
ERROR: [2] bootstrap checks failed
jvm 1 | [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
jvm 1 | [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
jvm 1 | 2021.05.18 20:07:35 WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [es]: 78
jvm 1 | 2021.05.18 20:07:35 INFO app[][o.s.a.SchedulerImpl] Process[es] is stopped
jvm 1 | 2021.05.18 20:07:35 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped
ulimit -Hn
echo ulimit -n 65536 >>/etc/profile
source /etc/profile
https://blog.csdn.net/jiahao1186/article/details/90235771
console:启动sonarqube,并打印启动日志,Ctrl+C,终止打印,同时sonarqube关闭;
start:启动sonarqube,但不打印日志;
status:查询sonarqube运行状态
soanr默认端口为9000,浏览器录入localhost:9000,访问sonarqube;
sonar初始用户为admin,密码同样为admin,点击登录,即可进入sonarqube页面;
3,汉化
sonar启动后是一个英文版的页面,不符合我们的语言习惯,安装汉化插件可以对系统进行汉化处理;
如果是安装的最新版本的soanrqube,安装汉化包,直接在Administration>Marketplace中搜索“ch”,安装Chinese Pack插件,而后重启sonarqube即可;
但是对于7.8版本,因为是历史版本,最新的汉化插件并不适合,通过下表,我们可知,sonarqube7.8版本对应的汉化包为1.28版本;
在此链接链接:https://pan.baidu.com/s/1xVsdDgKZTQb9tHMuddbqdQ
下载1.28版本的jar包
提取码:xwgn
将下载好的jar包放在本地sonarqube插件目录sonarqube-7.8/extensions/plugins下,重启sonarqube。
登录SonarQube
用户名:admin
密码:admin
四 Jenkins集成SonarQube
1 Jenkins安装SonarQube Scanner插件
2 Jenkins配置SonarQube
2.1 SonarQube 生成token
2.2 Jenkins配置凭据
2.3 在jenkins主机之上安装 SonarQube Scanner
unzip sonar-scanner-cli-4.6.1.2450-linux.zip
mv sonar-scanner-4.6.1.2450-linux/ /opt/
ln -s sonar-scanner-4.6.1.2450-linux sonar-scanner
vi /etc/profile
export SONAR_SCANNER_HOME=/opt/sonar-scanner
export PATH=$SONAR_SCANNER_HOME/bin
source /etc/profile
bash: ls: command not found的解决办法
export PATH=/bin:/usr/bin:$PATH:$SONAR_SCANNER_HOME/bin
cd /opt/sonar-scanner
vi conf/sonar-scanner.properties
sonar.host.url=http://192.168.8.33:9000
2.4 Jenkins 配置 SonarQube Scanner
-
jar
-
pipeline
stage('code checking') {
steps{
echo "sonar start"
script {
scannerHome = tool 'sonar-scanner'
}
withSonarQubeEnv('sonarqube') {
sh "${scannerHome}/bin/sonar-scanner"
}
}
}
- sonar-project.properties
sonar.projectKey=${env.JOB_NAME}
sonar.projectName=${env.JOB_NAME}
sonar.projectVersion=${env.BUILD_NUMBER}
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.target=1.8
sonar.sourceEncoding=UTF-8
sonar.java.binaries=${env.WORKSPACE}