Ubuntu docker搭建sonarqube社区版
本文最后更新于:2024年10月11日 晚上
1、sonarqube介绍
Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。支持Java、kotlin、Scala、python、JavaScrip等二十几种编程语言的代码质量管理与检测。支持将代码扫描集成到现有的工作流,以便在项目分支和拉取请求之间进行连续的代码检查。
sonarqube分为四个版本:社区版、开发版、企业版、数据中心版,各版本之间差异如下
官网:https://www.sonarsource.com/products/sonarqube/
Sonar分为两部分:
- 第一部分为服务端,为Sonarqube为代码指令管理平台
- 第二部分为客户端,为sonar-scanner扫描器
后续操作将完整的docker搭建sonarqube服务平台过程做记录,并使用sonar-scanner进行手工代码扫描尝试。
2、环境配置要求
搭建环境配置参考:
类型 | 配置 |
---|---|
OS系统 | Ubuntu 24.1 LTS |
RAM | 8G(要求>=4G) |
CPU | 2 cores(要求>=2 cores) |
硬盘 | 20G(要求>=30G) |
JAVA | version 17(要求至少为JAVA 11,不支持Java8) |
PostgreSQL | version 16(要求>=11) |
其中硬盘自行决定,这里20GB仅作为短时间验证使用,存储空间按照官方要求来。
3、docker安装PostgreSQL
由于PostgreSQL在性能和兼容性方面优于MySQL,并且作为官方的推荐使用数据库,这里基于PostgreSQL来进行安装配置:
3.1、拉取PostgreSQL镜像
1 |
|
拉取上图中标红的官方镜像:
1 |
|
完成后如下:
查看拉取的镜像:
1 |
|
3.2、创建PostgreSQL容器
创建镜像实例(容器):
:容器名称。自定义 :账户名 :账户密码 :数据库名
1 |
|
其中-p
后接映射端口,此实例下,将容器PostgreSQL默认端口映射到主机的5432端口上。ALLOW_IP_RANGE=0.0.0.0/0 允许任何主机访问,-v /opt/postgres:/var/lib/postgresql/data,做数据持久化,此目录需确保存在。
执行后,docker ps
查看运行的容器:
使用前面的账户名,连接到postgresql容器指定的数据库:
1 |
|
psql为postgres控制指令。也可使用其他工具如navicat、datagrip等客户端连接到对应的数据库。
效果如下:
\l
查看所有的数据库:
\q
退出postgre命令行。
4、使用docker安装sonarqube
4.1、拉取sonarqube镜像
Docker Hub库:https://hub.docker.com/_/sonarqube/tags
根据需要选择对应版本,我这里选择社区版本,拷贝后面的拉取镜像指令:
在Ubuntu执行,拉取sonarqube社区版镜像:
1 |
|
拉取完成如下:
使用docker images
查看本地的镜像,可以看到已经有对应镜像:
4.2、创建sonarqube容器实例
1)创建默认数据库实例
我们来根据镜像创建并运行实例,当不指定数据库创建时,默认为H2嵌入式数据库:
1 |
|
运行成功:
之后根据创建时的端口,在Linux设备中浏览器访问对应的地址:http://localhost:9000/ ,初始管理员用户和密码为:admin/admin
登录之后会要求更新密码:
登录之后页面如下:
默认的H2嵌入式数据库有下面几个缺点:
- 内嵌数据库只能用于测试场景。
- 内嵌数据库无法扩展。
- 无法升级到新版本的SonarQube。
- 不支持将数据迁移至其他数据库引擎。
基于这些点,也参考官方推荐,使用postgresql数据库是较好的一种方式。下面来说明如何指定PostgreSQL创建sonarqube创建容器实例。
2)创建指定PostgreSQL数据库实例-推荐
提前在Linux设备创建下面几个目录,做相关的数据存放:
1 |
|
之后,创建PostgreSQL数据库容器实例:
1 |
|
通过下面这些参数,将指定Postgresql数据库启动,IP替换为postgresql所在的主机地址,sonarqube_db对应为第三节:3、docker安装PostgreSQL创建的数据库名称:
1 |
|
下面路径分别做数据存放:
1 |
|
创建完成后,docker ps -a
查看对应的容器状态:
在Linux设备浏览器中访问sonarqube服务对应的地址:http://localhost:9000/ ,默认管理员用户及密码:admin/admin,与上一节相同,更新密码后进入到主界面:
注:切换到postgresql首次启动,初始化时间相对会长一些。
若出现问题,可以通过docker logs -f sonarqube
查看对应的日志信息检查错误点,修正后重启容器。sonarqube为容器名称。
5、插件安装
5.1、中文汉化插件安装
进入到插件商城,搜索插件chinese
,按下面操作进入到插件主页进行下载:
跳转后到如下仓库,进入发布页面:
选择指定版本,点击下载jar包:
注: 下载的插件版本需要与实际sonarqube版本一致,兼容性表参考:
将下好的插件放置到以下路径:
1 |
|
此路径,通过docker inspect 772c017e3e4e
检查mounts可查看到,772c017e3e4e为容器ID:
放置好插件之后,执行docker restart 772c017e3e4e
重启sonarqube容器生效,772c017e3e4e为容器ID。
之后再进入sonarqube首页,可以看到切换为了中文界面。
5.2、PDF分析报告导出插件
PDF报告导出的功能,官方需要升级到企业版才支持,社区版可通过插件来拓展能力。
1)方案1:pdf-plugin插件
插件仓库:https://gitee.com/zzulj/sonar-pdf-plugin/releases
下载9.x版本:
放置到插件路径:
重启sonarqube容器:
重启后进入sonarqube首页,配置PDF下载的账户:填写账户名及密码
之后在‘项目’->‘更多’中,可以看到有下载PDF的按钮,点击直接下载即可:
需要注意的是,在安装完这个插件之后,首次使用需要进行1次新的扫描,否则无法下载PDF。
此插件,目前实测使用存在问题,sonarqube 9.9 LTS版本在执行完1次扫描后,依旧无法下载,实际使用的话需要考虑一下。
2)方案2:bitegarden Report Plugin
其他生成报告插件,付费插件,此插件有14天试用期:https://www.bitegarden.com/sonarqube-report-documentation
填写相关申请信息下载插件使用,信息内容自定义,无校验:
插件下载完成放到sonarqube插件路径,重启sonarqube容器生效:
1 |
|
5.3、配置PMD、findbugs、checkstyle规则插件
findbugs插件:https://github.com/spotbugs/sonar-findbugs
checkstyle插件:https://github.com/checkstyle/sonar-checkstyle
根据官方插件适配矩阵,选择对应版本集成相应的规则插件。下载jar包放入插件路径:
1 |
|
重启sonarqube容器生效。
5.4、C语言扫描插件
插件仓库:https://github.com/SonarOpenCommunity/sonar-cxx
根据适配矩阵下载插件版本,放入插件路径。重启sonarqube容器使插件生效。
配置C/c++扫描规则:
- 1、创建质量配置:质量配置->创建->创建空质量配置->语言选择cxx->名称自定义
- 2、进入质量配置->打开创建的
cpp_extra_rule
配置->右上角齿轮->激活更多规则
- 3、进入到代码规则页面:批量修改->激活->选择
cpp_extra_rule
配置->应用
4、切换默认规则:进入质量配置->cxx配置->
cpp_extra_rule
右侧齿轮打开菜单->选择设为默认
5、项目配置:进入项目页面->打开项目配置->选择
质量配置
- 6、配置项目语言及文件后缀:
添加新语言:选择CXX->选择cpp_extra_rule
配置
进入CXX配置页->修改File suffixes文件后缀->添加下面的后缀(.cxx/,cpp/.cc/.c)
至此,可正常在此项目下进行c语言项目扫描了:
6、手动代码分析
在配置完sonarqube后,进入到主页,我们点击‘手工’尝试一下手动代码扫描:填入显示名、项目标识,点击设置进入下一步
由于暂时还未集成其他系统,这里选择其他CI:
进入令牌创建页,点击创建:
保存令牌并点击继续:创建的令牌可在期限内应用到多项目的扫描中
接着根据项目情况选择类型:
根据下面的步骤进行操作:
- 1、拷贝第一步中的指令,在windows poershell中执行,下载windows平台的扫描器
1 |
|
- 2、添加环境变量
系统环境变量中创建SONAR_TOKEN
,对应值为令牌内容:
- 3、在项目目录下执行扫描器,触发扫描:
1 |
|
进入到项目目录,执行上述扫描指令:
执行完成之后,会出现EXECUTION SUCCESS
关键字,sonarqube页面会自动刷新结果:
点击对应项可查看详情:
参考:
https://www.pkslow.com/docs/zh/docker-sonarqube/#_2-1-%E5%AE%89%E8%A3%85
https://blog.csdn.net/qq_44281591/article/details/132252039
https://www.cnblogs.com/lixie0215/p/15341843.html
https://juejin.cn/post/7021019542130262024