cover_image

Sonar在掌门的落地与实践

胡陈东 刘万红 掌门技术
2020年02月13日 06:00
项目背景

随着掌门的发展,代码的积累量已经达到了吨级,偶尔会出现如下一些问题:

1、线上环境偶尔会抛出一些平时不常出现的报错信息、安全隐患以及一些问题;

2、开发人员线上查问题时,偶尔出现一些具有干扰的报错信息;

3、人员更变、模块更变、开发习惯导致在熟悉代码过程中效率不高;

为了提高代码的质量,尽量避免一些没有必要存在的问题,故引进SonarQube静态代码监控平台。它主要从7个维度检测代码质量,主要通过插件形式对java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测。


SonarQube框架

SonarQube框架主要包含以下4个部分:

Project

SonarQube Sacnner

SonarQube Server

SonarQube Database

图片

静态代码扫描结果图:

图片


SonarQube平台搭建

1)流程图如下:

SonarQube需搭配Sonar-Scanner、Jenkins、git、MySQL完成全流程自动扫描,如下:

图片

2)报告部分相关代码展示如下:

图片

3)在Jenkins中SonarQube部分配置如下:

图片


搭建过程中的问题

搭建过程中主要遇到如下问题:

问题1:

启动失败,报错信息:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x000000008a660000, 1973026816, 0) failed; error='Cannot allocate memory' (errno=12)

解决方式:

修改config下的jvm.option文件

# vim elasticsearch/elasticsearch-5.5.1/config/jvm.opstions

-Xms2g

-Xmx2g 

改为

-Xms1g

-Xmx1g

或更小

-Xms512M

-Xmx512M

再次启动即可


问题2:

启动SonarQube报错,报错信息:max file descriptors [65535] for elasticsearch process likely too low, increase

解决方式:

1、修改/etc/security/limits.conf

*    hard    nofile    65536

*    soft    nofile    65536

*    soft    nproc    65536

*    hard    nproc    65536


2、修改/etc/pam.d/sshd

[root@master config]# cat /etc/pam.d/sshd

session    required   /lib64/security/pam_limits.so


[root@master config]# cat /etc/pam.d/common-session

session required /lib64/security/pam_limits.so


3、修改/etc/profile增加一条

ulimit -n 65536


4、重启sshd服务

/etc/init.d/sshd restart


SonarQube在部门项目中的具体应用

自动化周报

每周邮件自动通知各组leader一次,汇报各个项目组上周所有项目落地情况,如图:

图片

报告部分相关代码展示如下:

图片


自动化日报

每天自动发送日报给各组leader以及相关开发测试人员,如图:

图片


bugs修复实例

问题一:

在落地过程中开发也修复了一些问题,比如空指针问题,红框中的代码是扫描出问题后修复的:

图片

图片

图片

若getChildrenList为空,则程序就会报空指针,因此可以看出是可能存在空指针问题的。


问题二:

冗余的代码导致代码不精简

图片

图片

图片

图片


问题三:

逻辑判断不准确、导致部分代码永远无法执行

图片

process.exit(1)在throw之后,导致这一行代码永远无法执行


漏洞修复实例:

问题四:

前端js使用了目前比较敏感的函数,导致代码可能存在安全漏洞,如下:

图片


eval该参数不推荐使用,理由如下:

图片

图片


问题五:

后端常量定义不规范,存在潜在安全漏洞,如下:

图片

定义的常量没有添加final 关键字,如果在后续开发中不小心修改了该常量,那么项目中所有引用该常量的程序都有可能出现问题。


问题六:

日志打印不规范,如图:

图片

直接使用该方式会导致在日志系统中没办法查询问题并且该方式的性能不太好


客户端和课堂云存量Bug和漏洞燃尽图

经过几个月的推动和修复,数据库中有了一定的数据储备,于是产生了Bug燃尽图和漏洞燃尽图(虚线),如图:

图片

图片


SonarQube展望

目前SonarQube已接入约350个项目,在CI/CD发布平台已经接入SonarQube模块,如下图:

图片

今后打算在该平台中监控增量代码,实现发布代码中不具备已知的BUG以及漏洞。

下面举一个具体的例子:
当前sprint需要发布A、B、C 共3个项目, 开发提交代码后,CI/CD发布系统此时自动触发SonarQube执行增量扫描,扫描结果中,若BUG和漏洞分别等于0,CI/CD发布系统自动执行打包操作,否则发送邮件给相关开发以及测试,通知他们需修复增量问题,修复完毕后才能执行打包发布的操作。


图片
图片
图片

本文作者


胡陈东,5年测试经验,擅长性能测试,自动化测试。熟悉java, python。现任职掌门1对1测试开发工程师。

刘万红,多年互联网大厂测试经历,现任职掌门1对1研发部测试经理 擅长接口/性能/自动化等各种测试平台开发。


继续滑动看下一个
掌门技术
向上滑动看下一个