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

发表于:2021-3-19 09:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:爱健健    来源:CSDN

  一、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、OracleSQL 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=sonar
  sonar.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.0
  sonar.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.log
  2020.02.13 14:59:03 INFO  ce[o.s.ce.app.CeServer] Compute Engine is up
  2020.02.13 14:59:03 INFO  app[o.s.p.m.Monitor] Process[ce] is up
  #确保sonar的日志出现以上两行内容
  [root@jenkins ~]# ss -lnt | grep 9000
  LISTEN     0      25           *:9000                     *:*      
  #确保sonar的端口已经在监听
  五、配置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.properties
  sonar.host.url=http://localhost:9000
  sonar.sourceEncoding=UTF-8
  #以下是从sonar的主配置文件中复制:/usr/local/sonarqube/conf/sonar.properties中复制过来的,用于连接数据库
  sonar.jdbc.username=sonar
  sonar.jdbc.password=123.com
  sonar.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.xml
  sonar.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      #进行测试

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号