一. 关于SonarQube
SonarQube®是一款开源的代码质量管理工具,用于检测代码中的错误,漏洞和代码味道。它可以与现有的工作流程集成,以实现跨项目分支和提取请求的连续代码检查;支持多种语言,如:JAVA、C#、C\C++ 、python等,同时可以与 Sonar Scanner、Maven、Jekins、IDEA 等工具进行集成。
二. 快速安装方式
SonarQube 应用已分享到Rainbond应用市场,通过Rainbond社区开源商店即可一键安装。
三. 应用制作流程
SonarQube 官方提供了Docker镜像 1,所以部署过程使用基于Docker镜像进行部署。
组件概述
SonarQube server
SonarQube的server端,运行以下进程:
提供SonarQube用户界面的Web服务器。
基于Elasticsearch的搜索服务器。
计算引擎负责处理代码分析报告并将其保存在SonarQube数据库中。
Database server
SonarQube的数据库,存储以下内容:
代码扫描期间生成的代码质量和安全性的度量标准和问题。
SonarQube实例配置。
官方支持多个 数据库引擎 Microsoft SQL Server, Oracle,PostgreSQL,此次部署使用的是PostgreSQL数据库。
组件部署
数据库部署
使用PostgreSQL官方镜像在Rainbond平台使用 docker run 的方式进行部署。部署命令如下
docker run -d --name postgres \
-p 5432:5432 \
-v /my/own/datadir:/var/lib/postgresql/data \
-e POSTGRES_USER=sonar \
-e POSTGRES_PASSWORD=sonar \
-e POSTGRES_DB=sonar \
postgres:13.0
基于postgresql 13.0版本,端口为5432,将数据存储目录 /var/lib/postgresql/data 持久化,创建了用户sonar 密码为sonar ,数据库名为sonar 。
PostgreSql 本身为有状态服务,在Rainbond部署时平台将会对镜像进行检测,自动判定为有状态组件进行部署。
SonarQube部署
同上,使用 docker run 的方式进行部署
部署命令
docker run -d --name sonarqube \
-p 9000:9000 \
-e SONAR_JDBC_URL=jdbc:postgresql://127.0.0.1:5432/sonar \
-e SONAR_JDBC_USERNAME=sonar \
-e SONAR_JDBC_PASSWORD=sonar \
-v sonarqube_data:/opt/sonarqube/data \
-v sonarqube_extensions:/opt/sonarqube/extensions \
-v sonarqube_logs:/opt/sonarqube/logs \
sonarqube:8.5.1-community
基于sonarqube社区版本8.5.1的官方镜像,端口为9000, 通过环境变量的方式定义了数据库的连接地址,用户名及密码,并将数据目录进行持久化,需将内存调整为至少2G,否则可能会出现无法启动的问题。
建立依赖
sonarqube组件需要建立对postgresql的依赖,才能正常连接数据库,在Rainbond平台建立依赖关系后,在依赖组件中将会启动一个代理容器,从而使依赖组件能够通过127.0.0.1的连接地址连接被依赖组件,相关原理请参考服务间通信 1。
最终应用拓补图如下
四. 使用示例
打开SonarQube 组件端口对外服务,点击访问策略中生成的访问地址稍等一会即可访问到SonarQube web页面;默认的系统管理员用户密码为 admin / admin 。
安装插件 Chinses Pack 以设置中文,并开通 Checkstyle java检查分析器。
点击上方 Administration –> Marketplace,搜索ch,以下结果点击 install,安装后会提示重启服务点击 RestartServer 稍等重启重启即可。
对Java项目进行代码分析
示例Java项目:https://gitee.com/rainbond/java-maven-demo 2
在SonarQube 中新建项目,创建令牌,选择代码语言,得到如下的命令
在代码进行构建时,在 构建源–>源码构建参数设置–>Maven构建参数 中添加以上参数进行构建,构建结束即可在SonarQube web页面查看代码检测结果。
在maven构建参数中添加了以下参数
sonar:sonar \
-Dsonar.java.binaries=target/sonar \#需单独添加此项参数
-Dsonar.projectKey=testdemo \
-Dsonar.host.url=http://9000.gra997f7.s8gh17j3.17f4cc.grapps.cn \
-Dsonar.login=test
web页面查看结果
更多语言代码检测方法可参阅官方文档获取。
官方文档:https://docs.sonarqube.org/latest/
官方社区:https://community.sonarsource.com/