千家信息网

使用 Sonar 进行代码质量管理及邮件报警

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,一、Sonar 概述Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析性工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins
千家信息网最后更新 2025年12月01日使用 Sonar 进行代码质量管理及邮件报警

一、Sonar 概述

Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar 可以集成不同的测试工具,代码分析性工具,以及持续集成工具。

与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。

在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。

此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

Sonar 的功能就是来检查代码是否有 BUG。除了检查代码是否有 bug 还有其他的功能,比如说:你的代码注释率是多少,代码有一些建议,编写语法的建议。所以称之为质量管理。

Sonar 的相关下载和文档可以在下面的链接中找到:http://www.sonarqube.org/downloads/。
需要注意最新版的 Sonar 需要至少 JDK 1.8 及以上版本。

二、部署Sonar

注意:接下来的配置需要基于博文Jenkins+Gitlab实现持续集成的环境进行部署的。

部署环境中所需的软件包及插件均可通过此链接进行下载。
关于Sonar所需的插件也可通过https://docs.sonarqube.org/display/PLUG 该网址进行下载!

[root@jenkins ~]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-5.6.zip[root@jenkins ~]# unzip sonarqube-5.6.zip[root@jenkins ~]# mv sonarqube-5.6 /usr/local/sonarqube[root@jenkins ~]# ln -s /usr/local/sonarqube/bin/linux-x86-64/sonar.sh /usr/local/bin

三、安装MySQL数据库

sonar需要使用数据库,MySQL、Oracle、SQL server都是支持的,本次博文采用MySQL数据库。如果环境已经存在MySQL数据库,那么就无需再次部署了,创建相应的数据库及用户即可!

为了简单、快速的部署Mysql数据库,采用脚本的方式安装Mysql数据库,下载一键安装mysql

友情提示:sonar 好像不支持 mysql 5.5,建议安装mysql 5.6或更高的版本,提供的脚本安装的是mysql5.7的版本!

[root@jenkins ~]# ls mysql*mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz  mysql.sh[root@jenkins ~]# sh mysql.sh Starting MySQL.. SUCCESS! mysql: [Warning] Using a password on the command line interface can be insecure.[root@jenkins ~]# mysql -u root -p123               #脚本提供的root的密码是123#登录mysql数据库mysql> create database sonar character set utf8 collate utf8_general_ci;mysql> grant all on sonar.* to 'sonar'@'%' identified by '123.com';mysql> grant all on sonar.* to 'sonar'@'localhost' identified by '123.com';mysql>  flush privileges; 

三、配置Sonar

[root@jenkins ~]# vim /usr/local/sonarqube/conf/sonar.properties#编辑sonar的主配置文件sonar.jdbc.username=sonarsonar.jdbc.password=123.com                   #指定连接数据库使用的用户及密码sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerforman#定义连接mysql数据库的地址及端口(默认存在去除注释即可)sonar.web.host=0.0.0.0sonar.web.port=9000                # 定义Sonar提供Web页面监听的IP地址和端口#接下来配置sonar支持中文页面以及支持PHP语言[root@jenkins ~]# cd /usr/local/sonarqube/extensions/plugins/    [root@jenkins plugins]# ls *.jar            #确保这个目录下有这两个jar包sonar-l10n-zh-plugin-1.11.jar  sonar-php-plugin-2.9-RC1.jar[root@jenkins ~]# sonar.sh start                 #启动sonar[root@jenkins ~]# tail -2 /usr/local/sonarqube/logs/sonar.log2020.02.13 14:59:03 INFO  ce[o.s.ce.app.CeServer] Compute Engine is up2020.02.13 14:59:03 INFO  app[o.s.p.m.Monitor] Process[ce] is up#确保sonar的日志出现以上两行内容[root@jenkins ~]# ss -lnt | grep 9000LISTEN     0      25           *:9000                     *:*      #确保sonar的端口已经在监听

访问sonar的web页面,如下:


四、配置Sonar实现代码扫描

[root@jenkins ~]# wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip[root@jenkins ~]# unzip sonar-scanner-cli-3.3.0.1492-linux.zip [root@jenkins ~]# mv sonar-scanner-3.3.0.1492-linux/ /usr/local/sonar-scanner[root@jenkins ~]# ln -s /usr/local/sonar-scanner/bin/sonar-scanner /usr/local/bin/[root@jenkins ~]# ln -s /usr/local/sonar-scanner/bin/sonar-scanner /usr/bin[root@jenkins ~]# vim /usr/local/sonar-scanner/conf/sonar-scanner.propertiessonar.host.url=http://localhost:9000sonar.sourceEncoding=UTF-8#以下是从sonar的主配置文件中复制:/usr/local/sonarqube/conf/sonar.properties中复制过来的,用于连接数据库sonar.jdbc.username=sonarsonar.jdbc.password=123.comsonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

五、测试代码扫描功能

[root@jenkins ~]# unzip testalyzer-master.zip     #该软件包可从博文开头连接中获取[root@jenkins ~]# cd testalyzer-master/projects/languages/php/php-sonar-runner-unit-tests/[root@jenkins php-sonar-runner-unit-tests]# cat sonar-project.properties #看一下下面的文件中都包含了些什么sonar.projectKey=org.sonarqube:php-ut-sq-scanner     #自定义秘钥,如果秘钥一样,就会自动覆盖之前的测试结果sonar.projectName=PHP :: PHPUnit :: SonarQube Scanner        #web界面显示的名称sonar.projectVersion=1.0      #版本sonar.sources=src        #软件包存放路径sonar.tests=tests       #测试路径sonar.language=php        #要测试的语言sonar.sourceEncoding=UTF-8          #编码格式sonar.php.coverage.reportPath=reports/phpunit.coverage.xmlsonar.php.tests.reportPath=reports/phpunit.xml#也就是说在项目里面必须有这个配置文件才可以进行扫描#测试PHP代码[root@jenkins php-sonar-runner-unit-tests]# pwd    #确定在当前路径/usr/src/testalyzer-master/projects/languages/php/php-sonar-runner-unit-tests[root@jenkins php-sonar-runner-unit-tests]# sonar-scanner    #进行测试#测试js代码[root@jenkins php-sonar-runner-unit-tests]# cd /root/testalyzer-master/projects/languages/javascript/javascript-sonar-runner[root@jenkins javascript-sonar-runner]# sonar-scanner      #进行测试

当执行完成对js及PHP的测试后,即可在sonar的web界面看到如下内容:

点击之后即可查看详细信息,如图:

六、配置Jenkins开启Sonar

登录到Jenkins的web界面,需要安装插件,有在线安装及离线安装两种方式,我这里选择离线安装,可以自行进行在线安装的方式。

1)依次点击:系统管理-->插件管理-->高级,然后下拉页面:

下载所需插件按照"sonar"-->"gerrit-trigger"-->"sonar-gerrit"进行安装即可,在线安装顺序:"SonarQube Scanner"-->"Gerrit Trigger"-->"Sonar Gerrit Plugin"
如图:

2)依次点击:系统管理-->系统设置,配置如下:


3)依次点击:系统管理-->全局工具配置,然后下拉页面:


4)进入上篇博文构建的项目中,如下:



为了便于区分,输入以下代码:

sonar.projectKey=web-demosonar.projectName=web-demosonar.projectVersion=1.0sonar.sources=srcsonar.tests=testssonar.language=phpsonar.sourceEncoding=UTF-8   sonar.php.coverage.reportPath=reports/phpunit.coverage.xmlsonar.php.tests.reportPath=reports/phpunit.xml   

5)回到终端,向gitlab提交代码,即可实现Sonar自动扫描
[root@jenkins ~]# cp -r testalyzer-master/projects/languages/php/php-sonar-runner-unit-tests/* test01/[root@jenkins ~]# cd test01/[root@jenkins test01]# git add .[root@jenkins test01]# git commit -m "test sonar"[root@jenkins test01]# git push origin master

如图:

如果没有出现的话,建议上Jenkins页面查看是否构建成功!

七、配置Jenkins实现邮件报警

1)获取邮箱授权码

本次以QQ邮箱为例:




2)配置邮件报警:

在Jenkins的web界面依次点击:系统管理-->系统设置,然后下拉输入系统管理员的邮箱地址并保存:

下拉列表,继续填写!

3)配置项目






4)测试

重启gitlab服务,重新构建项目,如下:

[root@jenkins ~]# gitlab-ctl restart

如图:

收到的邮件如下:

------------本文到此为止,感谢阅读------------

代码 配置 数据 数据库 测试 管理 工具 支持 插件 系统 页面 不同 质量 建议 文件 方式 版本 界面 结果 项目 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 企业网络安全应用中心下载 软件开发公司盗用设计 关于网络安全教育主题班会 做好网络安全维护 vue富文本框保存数据到数据库 汽车标定与软件开发流程 吉林省ipfs服务器配置云空间 现如今缺网络技术 数据库有什么来管理 软件开发基础知识不扎实 未转变者看不到服务器怎么办 国网湖南电力网络安全 数据库学习笔记简练版 如何设计多级菜单数据库表 互联网黑科技虚胖 TBC怀旧服服务器阵营比例 肇庆通信软件开发报价表 国外网络安全战略研究所 ps4彩虹6 号服务器中文 乐刻网络网络技术有限公司 isi论文数据库是sci吗 四川电商软件开发哪家可靠 单服务器多docker网络抖动 数据库数据控制功能有哪些 杭州游卡网络技术面试 2个服务器共用一个显示器 戴尔r740服务器后边的网口 一般软件开发过笔试得多少分 网络安全产业规模 国家网络技术考试题库
0