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

Sonar是一个用于代码质量管理的开放平台,经过插件机制,Sonar能够集成不一样的测试工具、代码分析工具以及持续集成工具。与持续集成工具(如Hudson/Jenkins等)不一样,Sonar并非简单地把不一样代码检查结果(例如:FindBugs、PMD等)直接显示在web UI界面上,而是经过不一样的插件对这些结果再加工处理,经过量化的方式度量代码质量的变化,从而能够方便地对不一样规模和种类的工程进行代码质量管理。javascript

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

此外,Sonar 的插件还能够对 Java 之外的其余编程语言提供支持,对国际化以及报告文档化也有较好的支持。java

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

1、部署Sonar

接下来的配置是基于博文部署Jenkins+Gitlab实现持续集成的环境进行部署
全部的源码包及插件均可以在此连接(提取码: t976)下载linux

[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/

2、安装MySQL

sonar须要使用到数据库,这里我使用MySQL数据库,若是环境中存在数据库,则无需部署,只须要建立相应的库及帐号便可git

#采用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;

3、配置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界面:
持续集成之代码质量管理———Sonarweb

4、配置代码扫描功能

#配置代码扫描
[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

5、测试代码扫描功能

[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界面看到以下内容:
持续集成之代码质量管理———Sonar
点击进入后能够看到详细信息:
持续集成之代码质量管理———Sonarsql

6、配置Jenkins开启Sonar

登陆到Jenkins的web界面,须要安装插件,有在线安装及离线安装两种方式,我这里选择离线安装,能够自行进行在线安装的方式
一、依次点击:系统管理===>>插件管理===>>高级,而后下拉页面:
下载我提供的插件,按照如下顺序依次添加,如果在线安装,依次搜索“SonarQube Scanner”、“Gerrit Trigger”、"Sonar Gerrit Plugin"进行安装便可:
持续集成之代码质量管理———Sonar
二、依次点击:系统管理===>>系统设置,而后配置以下:
持续集成之代码质量管理———Sonar
持续集成之代码质量管理———Sonar
切记要点保存
三、依次点击:系统管理===>>全局工具配置,而后单击以下:
持续集成之代码质量管理———Sonar
持续集成之代码质量管理———Sonar
四、进入构建的项目,而后点击进入,以下:
持续集成之代码质量管理———Sonar
持续集成之代码质量管理———Sonar
持续集成之代码质量管理———Sonar
在终端复制一下代码:数据库

[root@jenkins /]# cd ~/testalyzer-master/projects/languages/php/php-sonar-runner-unit-tests/
[root@jenkins php-sonar-runner-unit-tests]# egrep -v '^#|^$' sonar-project.properties 
#复制以下代码
sonar.projectKey=org.sonarqube:php-ut-sq-scanner
sonar.projectName=PHP :: PHPUnit :: SonarQube Scanner
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

五、而后在图中粘贴复制的代码(为了方便区分测试结果,建议修改“sonar.projectKey”的值):
持续集成之代码质量管理———Sonar
六、回到终端,向gitlab提交代码,便可实现自动sonar扫描编程

[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]# cp -r * ~/test1/
#将测试代码复制到本地git库(若是没有本地git库,能够再次克隆一下)
[root@jenkins php-sonar-runner-unit-tests]# cd ~/test1/           # 进入到本地git库
[root@jenkins test1]# rm -rf sonar-project.properties              #删除这个文件,不须要使用它来给咱们指定要测试的代码了
#由于咱们在刚才的web界面已经将其配置文件写在了web界面。优先使用web界面配置的检测代码。
#不删除这个文件也行
#而后提交到远端的gitlab库
[root@jenkins test1]# git add *
[root@jenkins test1]# git commit -m "test sonar"
[root@jenkins test1]# git push origin master

当提交到远端gitlab库后,便可看到sonar的web界面已经进行了代码扫描,而且显示出了扫描结果,以下:
持续集成之代码质量管理———Sonar
七、配置Jenkins邮件报警
开始配置邮件报警:
在Jenkins的web界面依次点击:系统管理===>>系统设置,而后在下面输入系统管理员的邮箱地址并保存:
持续集成之代码质量管理———Sonar
再次点击:系统管理===>>系统设置
持续集成之代码质量管理———Sonar
配置项目,以下:
持续集成之代码质量管理———Sonar
持续集成之代码质量管理———Sonar
持续集成之代码质量管理———Sonar
持续集成之代码质量管理———Sonar
在此点击项目>>配置
持续集成之代码质量管理———Sonar
持续集成之代码质量管理———Sonar
持续集成之代码质量管理———Sonar
持续集成之代码质量管理———Sonar
至此,邮箱报警就配置完成了,此时,能够在控制台关闭gitlab或者手动构建代码,测试是否能够收到报警邮件。
持续集成之代码质量管理———Sonar

相关文章
相关标签/搜索