Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量,通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测。
docker-compose安装SonarQube
docker-compose.yml:
1 | version: '3' |
创建插件目录,上传插件到该目录下:
1 | sonarqube/extensions/plugins |
插件:
多分支:
sonarqube-community-branch-plugin-1.14.0.jar
汉化:
sonar-l10n-zh-plugin-9.9.jar
下载链接:https://github.com/xuhuisheng/sonar-l10n-zh/releases
注:以上插件适配9.9版本的SonarQube,其他版本的需要找对应的版本插件。
配置权限:
1 | chown 1000:1000 -R sonarqube/extensions/plugins |
加载插件:
1 | vim sonarqube/conf/sonar.properties |
配置权限:
1 | chown 1000:1000 -R sonarqube/conf |
启动服务:
1 | docker-compose up -d |
启动完成后,通过10.168.2.236:19000访问,初始账号密码是admin/admin

jenkins集成SonarQube
jenkins安装SonarQube Scanner插件
插件市场的版本跟我们安装的jenkins版本不兼容:

可以到以下链接去把插件下载,再上传到jenkins:https://updates.jenkins-ci.org/download/plugins/
搜索Sonar,点击进去详情,我们的jenkins版本是2.361.4,所以下载2.15的版本:

下载完成后把插件上传到jenkins:


sonar生成token:


jenkins配置SonarQube服务连接及配置SonarQubeScanner工具
先配置凭据,系统管理-manager credentials-全局,创建新凭据:

jenkins系统管理处配置sonar连接:

配置SonarQubeScanner工具:
jenkins系统管理-全局工具配置:

在jenkins的job里引入SonarQube扫描
自由风格的软件项目类型的job
在原本job的基础上,构建步骤里加上Execute SonarQube Scanner:


流水线类型的job
我们的后端是java项目,用Maven构建,这里用Maven执行SonarQube扫描:

完整pipeline如下:
1 | pipeline{ |
如果想要选择勾选是否需要进行代码扫描,以及部署到不同的空间及配置副本数,可参考以下pipeline:
1 | pipeline { |

以上是通过Maven去扫描的,如果是前端的项目,也是流水线类型的job的话,在原本的流水线添加此步骤即可:

配置好之后我们构建成功后就可以在SonarQube平台看到扫描结果:

Jenkins定时扫描代码
可以把所有需要扫描的项目放到一个一个pipeline里,定时凌晨执行,如果项目太多,并行执行的话可能会导致机器资源使用率飙升导致宕机,所以需要限制最大并行数,同时如果有某个项目扫描失败不会导致整个流水线退出,而是继续执行扫描下一个项目,最后全部扫描完之后再把扫描失败的项目列出来。
前端代码扫描
1 | pipeline { |
后端代码扫描
1 | pipeline { |
其他配置
sonarqube是用java启动的,默认-xmx有三个,都是512M,(search是es)
1 | #sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError |
需要改的话可以在sonar.properties修改然后重启SonarQube服务:

jenkins的插件sonarscanner需要修改-xmx的话可以在JVM Options加:

问题
扫描前端项目时,特别慢,排查到是因为node执行的eslint特别消耗CPU,CPU飙到99:
