持续集成之代码质量管理———Sonar (1)

发表于:2022-3-31 09:49

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

 作者:张九冫    来源:51CTO博客

  Sonar是一个用于代码质量管理的开放平台,通过插件机制,Sonar可以集成不同的测试工具、代码分析工具以及持续集成工具。与持续集成工具(如Hudson/Jenkins等)不同,Sonar并不是简单地把不同代码检查结果(例如:FindBugs、PMD等)直接显示在web UI界面上,而是通过不同的插件对这些结果再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。
  在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。
  此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有较好的支持。
  Sonar 的功能就是来检查代码是否有 BUG。除了检查代码是否有 bug 还有其他的功能,比如说:你的代码注释率是多少,代码有一些建议,编写语法的建议。所以称之为质量管理。
  一、部署Sonar
  [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数据库,如果环境中存在数据库,则无需部署,只需要创建相应的库及账号即可。
  #采用RPM包的方式部署MySQL
  [root@jenkins ~]# mkdir mysql
  [root@jenkins ~]# cd mysql/
  [root@jenkins mysql]# rz
  [root@jenkins mysql]# ls            # 确定有如下几个包
  mysql-community-client-5.7.25-1.el7.x86_64.rpm 
  mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm
  mysql-community-common-5.7.25-1.el7.x86_64.rpm  
  mysql-community-server-5.7.25-1.el7.x86_64.rpm
  mysql-community-libs-5.7.25-1.el7.x86_64.rpm
  [root@jenkins mysql]# yum -y localinstall mysql-community-*       # 安装MySQL
  [root@jenkins mysql]# systemctl start mysqld         # 启动
  [root@jenkins mysql]# netstat -anput | grep 3306
  tcp6       0      0 :::3306                 :::*                    LISTEN      11411/mysqld        
  [root@jenkins mysql]# grep password /var/log/mysqld.log        # 在MySQL日志中查看登陆密码 
  2020-03-19T17:29:37.381630Z 1 [Note] A temporary password is generated for root@localhost: DfkgCtPsu5:4
  #上面末尾就是MySQL的默认root密码
  [root@jenkins mysql]# mysql -u root -p'DfkgCtPsu5:4'
  mysql> alter user 'root'@'localhost' identified by 'Zyz@123.com';
  mysql> create database sonar character set utf8 collate utf8_general_ci;
  mysql> grant all on sonar.* to 'sonar'@'%' identified by 'Zyz@123.com';
  mysql> grant all on sonar.* to 'sonar'@'localhost' identified by 'Zyz@123.com';
  mysql> flush privileges;

  三、配置Sonar
  [root@jenkins mysql]# cd /usr/local/sonarqube/conf/
  [root@jenkins conf]# sed -i 's/#sonar.jdbc.username=/sonar.jdbc.username=sonar/g' sonar.properties 
  #定义连接数据库的用户
  [root@jenkins conf]# sed -i 's/#sonar.jdbc.password=/sonar.jdbc.password=Zyz@123.com/g' sonar.properties
  #指定数据库用户的密码
  [root@jenkins conf]# echo 'sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance' >> sonar.properties 
  #用来定义连接数据库的地址及端口
  [root@jenkins conf]# sed -i 's/#sonar.web.port=9000/sonar.web.port=9000/g' sonar.properties
  #配置sonar支持中文页面及支持PHP
  [root@jenkins conf]# cd /usr/local/sonarqube/extensions/plugins/
  [root@jenkins plugins]# cp ~/sonar-l10n-zh-plugin-1.11.jar ./
  [root@jenkins plugins]# cp ~/sonar-php-plugin-2.9-RC1.jar ./
  [root@jenkins plugins]# sonar.sh start            #启动sonar,给它点初始化的时间
  [root@jenkins conf]# tail -2 /usr/local/sonarqube/logs/sonar.log              #查看sonar日志
  2020.03.20 02:00:29 INFO  ce[o.s.ce.app.CeServer] Compute Engine is up
  2020.03.20 02:00:29 INFO  app[o.s.p.m.Monitor] Process[ce] is up
  #当出现上面两行以“up”结尾的则表示sonar启动正常。
  [root@jenkins conf]# netstat -anput | grep 9000
  tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      52610/java   

  client访问sonar的web界面:
  四、配置代码扫描功能
  #配置代码扫描
  [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 ~]# cd /usr/local/sonar-scanner/conf/
  [root@jenkins conf]# egrep -v '^#|^$' 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=Zyz@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          #编码格式
  #测试PHP代码
  [root@jenkins php-sonar-runner-unit-tests]# pwd           # 确定当前路径
  /root/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 ../../javascript/javascript-sonar-runner
  [root@jenkins javascript-sonar-runner]# sonar-scanner 

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

  点击进入后可以看到详细信息:

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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号