SonarQube® is an automatic code review tool to detect bugs, vulnerabilities, and code smells in your code. It can integrate with your existing workflow to enable continuous code inspection across your project branches and pull requests.(SonarQube documentation | SonarQube Docs)
SonarQube®是一个自动代码检查工具,可以检测代码中的bug、漏洞和代码气味。它可以与您现有的工作流集成,以支持跨项目分支和拉取请求的连续代码检查。
1.2 安装(1)二进制方式(zip包)
下载地址:
Download | SonarQubeGet the latest LTS and version of SonarQube the leading product for Code Quality and Security from the official download page.https://www.sonarqube.org/downloads/将下载下来的zip包(如sonarqube-9.3.0.51899.zip)解压到指定的路径下,根据需要可以修改conf/sonar.properties配置文件。
我这里只修改了数据库配置,其他默认。
根据自己的系统平台,在bin目录下选择对应的启动命令进行启动即可(如bin/linux-x86-64/sonar.sh)。
(2)docker方式
由于sonarqube内嵌了elasticsearch,对宿主机有如下要求:
sysctl -w vm.max_map_count=524288 sysctl -w fs.file-max=131072 ulimit -n 131072 ulimit -u 8192
先安装数据库(注意:要给数据卷授予读写执行的权限)
docker run -d --restart=always
--privileged
--name postgres
-p 5432:5432
-e TZ=Asia/Shanghai
-e POSTGRES_USER=postgres
-e POSTGRES_PASSWORD=postgres
-e POSTGRES_DB=sonarqube
-v /opt/postgresql/data:/var/lib/postgresql/data
postgres:14.2
再安装sonarqube(通过--link方式访问postgresql)
docker run -d
--restart=always
--link=postgres
--privileged
--name sonarqube
-p 9001:9000
-e SONAR_JDBC_URL=jdbc:postgresql://postgres:5432/sonarqube?currentSchema=public
-e SONAR_JDBC_USERNAME=postgres
-e SONAR_JDBC_PASSWORD=postgres
-v /opt/sonarqube/data:/opt/sonarqube/data
-v /opt/sonarqube/extensions:/opt/sonarqube/extensions
-v /opt/sonarqube/logs:/opt/sonarqube/logs
sonarqube:9.3.0-community
(3)docker-compose方式
启动:docker-compose -f docker-compose.yml up -d
停止:docker-compose -f docker-compose.yml down
# docker-compose.yml
version: '3.1'
services:
postgres:
image: postgres:14.2
restart: always
container_name: postgres
ports:
- 5432:5432
volumes:
- /opt/sonarqube/postgres/postgresql:/var/lib/postgresql
- /opt/sonarqube/postgres/data:/var/lib/postgresql/data
environment:
TZ: Asia/Shanghai
POSTGRES_USER: sonarqube
POSTGRES_PASSWORD: sonarqube
POSTGRES_DB: sonarqube
sonarqube:
image: sonarqube:9.3.0-community
container_name: sonarqube
privileged: true
depends_on:
- postgres
volumes:
- /opt/sonarqube/extensions:/opt/sonarqube/extensions
- /opt/sonarqube/logs:/opt/sonarqube/logs
- /opt/sonarqube/data:/opt/sonarqube/data
- /opt/sonarqube/conf:/opt/sonarqube/conf
ports:
- 9001:9000
command:
# 内存设置
- -Dsonar.ce.javaOpts=-Xmx2048m
- -Dsonar.web.javaOpts=-Xmx2048m
environment:
SONARQUBE_JDBC_USERNAME: sonarqube
SONARQUBE_JDBC_PASSWORD: sonarqube
SONARQUBE_JDBC_URL: jdbc:postgresql://postgres:5432/sonarqube
1.3 配置
默认账号密码是admin/admin。
1.3.1 安装插件从“Administration -> Marketplace”打开插件界面,搜索指定的插件,点击插件列表右侧的“install”安装插件。
也可以从插件官网上下载,然后拷贝到“{SONARQUBE_HOME}/extensions/plugins”目录下。插件安装完毕后如下图。
插件列表:
插件目录:
1.3.2 质量配置每个语言都有内置的质量分析规则集合,如果项目没特别指定配置,用默认的配置。当然我们也可以给对应的语言,选择我们想要的规则,配置新的规则集合。
这里我们给Java语言创建一个新的名称为“CheckAll”的配置。
点击“质量配置->创建”,在新配置窗口,输入配置名称,如:CheckAll(多个规则汇聚与此)。选择语言,如:Java。
刚创建的“CheckAll”配置刚开始规则是空的,需要激活相应的规则到该配置下。
激活配置。
选择(或搜索)要到导入到CheckAll配置的其他规则,如Alibaba-P3C,点击“批量修改”->“激活”,在弹出的对话框中下拉选择“CheckAll”,点击“应用”后,Alibaba-P3C的规则就加入到CheckAll配置中。
Alibaba-P3C规则集已经添加到我们新创建的CheckAll配置中(共56条规则)。
同样的方式,将FindBugs和内置的Sonar Way相关的规则也添加到CheckAll配置下(共970条规则)。
要使用CheckAll规则,把它设置为默认的配置即可。
2. 质量分析 2.1 手工执行分析点击“项目”->"手工",在“手工设置”页面中输入项目的名称和标识,点击“设置”。(提示:“项目标识”不需要和具体的项目名称保持一致,该“项目标识”的作用主要是用于关联项目分析结果的)
选择“手工”或“其他CI”
输入令牌名称,如“sonar-test-project”,创建令牌。
令牌创建后,第二步根据项目的构建方式选择对应的技术,同时会生成相应的质量分析命令。我的测试项目是基于Maven构建的,所以选择Maven,其实该命令最终是由“ sonar-maven-plugin:3.9.1.2184:sonar”插件来实现质量分析扫描的。命令的参数只有几个必要的分析参数,更多分析参数请参考官方文档:Analysis Parameters | SonarQube Docs
这里我增加了两个属性,其中“-Dsonar.branch.name=dev”是通过第三方插件“Community Branch Plugin”实现的,sonarqube社区版不支持分支pull请求。
mvn clean verify sonar:sonar -Dsonar.projectKey=sonar-test-project -Dsonar.host.url=http://192.168.1.6:9001 -Dsonar.login=c9762ecddd4d3ea64d91bd4d4e86fa40ea8c2413 -Dmaven.test.skip=true -Dsonar.branch.name=dev
然后在项目源码的根目录(pom.xml所在的目录)执行上面的命令即可。
提示:projectKey,即项目标识,不需要和具体的项目名称保持一致,该“项目标识”的作用主要是用于关联项目分析结果的。其实该命令可以在任意基于Maven构建的项目下执行,只是分析结果“张冠李戴”了而已。
分析结果如下:
2.2 通过Gitlab-CI自动化执行分析[未完待续]



