转载:https://www.abcdocker.com/abcdocker/2053

摘要

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

 
 
 

持续集成之代码质量管理-Sonar [三]

Jenkins

 

Sonar介绍

Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar可以集成不同的测试工具,代码分析工具,以及持续集成工具。与持续集成工具(例如 Hudson/Jenkins 等)不同,Sonar 并不是简单地把不同的代码检查工具结果(例如 FindBugs,PMD 等)直接显示在 Web 页面上,而是通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。 
  在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。 
  此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

 

Sonar部署

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

 上篇文章我们已经可以成功的使用git进行拉去,Sonar的功能就是来检查代码是否有BUG。除了检查代码是否有bug还有其他的功能,比如说:你的代码注释率是多少,代码有一些建议,编写语法的建议。所以我们叫质量管理

Sonar还可以给代码打分,并且引用了技术宅的功能(告诉你有很多地方没改)

Sonar部署

 
  1. [root@linux-node1 ~]# yum install -y java-1.8.0
  2. [root@linux-node1 ~]# cd /usr/local/src
  3. 软件包我们通过wget或者下载,rz上传到服务器
  4. #软件包下载:https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-5.6.zip
  5. [root@linux-node1 src]# unzip sonarqube-5.6.zip
  6. [root@linux-node1 src]# mv sonarqube-5.6 /usr/local/
  7. [root@linux-node1 src]# ln -s /usr/local/sonarqube-5.6/ /usr/local/sonarqube

准备Sonar数据库 
如果没有数据库请执行yum install -y mariadb mariadb-server

 
  1. [root@linux-node1 ~]# systemctl start mariadb
  2. [root@linux-node1 ~]# systemctl enable mariadb
  3. Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
  4. [root@linux-node1 ~]# mysql_secure_installation
  5. [root@linux-node1 ~]# mysql -uroot -p123456

特别提示: 

sonar好像不支持mysql 5.5,所以如果看日志出现以上error 请安装mysql5.6 或者更高版本 
http://blog.csdn.net/onothing12345/article/details/49910087

执行sql语句

 
  1. mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
  2. mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar@pw';
  3. mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar@pw';
  4. mysql> FLUSH PRIVILEGES;

配置Sonar

 
  1. [root@linux-node1 ~]# cd /usr/local/sonarqube/conf/
  2. [root@linux-node1 conf]# ls
  3. sonar.properties wrapper.conf

编写配置文件,修改数据库配置

 
  1. [root@linux-node1 conf]# vim sonar.properties
  2. #我们只需要去配置文件里面修改数据库的认证即可
  3. 14 sonar.jdbc.username=sonar #数据库用户
  4. 15 sonar.jdbc.password=sonar@pw #数据库密码
  5. 23 sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&character Encoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

配置Java访问数据库驱动(可选) 
  默认情况Sonar有自带的嵌入的数据库,那么你如果使用类是Oracle数据库,必须手动复制驱动类到${SONAR_HOME}/extensions/jdbc-driver/oracle/目录下,其它支持的数据库默认提供了驱动。其它数据库的配置可以参考官方文档: 
http://docs.sonarqube.org/display/HOME/SonarQube+Platform

启动Sonar 
  你可以在Sonar的配置文件来配置Sonar Web监听的IP地址和端口,默认是9000端口。

 
  1. [root@linux-node1 conf]# vim sonar.properties
  2. 99 #sonar.web.host=0.0.0.0
  3. 106 #sonar.web.port=9000

启动命令如下:

 
  1. [root@linux-node1 ~]# /usr/local/sonarqube/bin/linux-x86-64/sonar.sh start
  2. Starting SonarQube...
  3. Started SonarQube.

如果有什么问题可以看一下日志[/usr/local/sonarqube/logs/sonar.log]

检查是否有相应的端口

 
  1. [root@linux-node1 ~]# netstat -lntup
  2. Active Internet connections (only servers)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  4. tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 2239/unicorn master
  5. tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 505/nginx: master p
  6. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 569/sshd
  7. tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 971/master
  8. tcp 0 0 127.0.0.1:43163 0.0.0.0:* LISTEN 5205/java
  9. tcp 0 0 0.0.0.0:8060 0.0.0.0:* LISTEN 505/nginx: master p
  10. tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN 4925/java
  11. tcp 0 0 0.0.0.0:43044 0.0.0.0:* LISTEN 4952/java
  12. tcp 0 0 0.0.0.0:33350 0.0.0.0:* LISTEN 5205/java
  13. tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 5011/java
  14. tcp 0 0 0.0.0.0:33385 0.0.0.0:* LISTEN 5011/java
  15. tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 4952/java
  16. tcp6 0 0 :::3306 :::* LISTEN 4658/mysqld
  17. tcp6 0 0 :::34993 :::* LISTEN 2348/java
  18. tcp6 0 0 :::8081 :::* LISTEN 2348/java
  19. tcp6 0 0 :::22 :::* LISTEN 569/sshd
  20. tcp6 0 0 ::1:25 :::* LISTEN 971/master
  21. udp6 0 0 :::33848 :::* 2348/java
  22. udp6 0 0 :::5353 :::* 2348/java

#端口是9000哦!

Web登陆:IP:9000 

提示: 
sonar跟jenkins类似,也是以插件为主 
sonar安装插件有2种方式:第一种将插件下载完存放在sonar的插件目录,第二种使用web界面来使用安装 
存放插件路径[/usr/local/sonarqube/extensions/plugins/]

安装中文插件 
登陆:用户名:admin 密码:admin 




需要重启才会生效

生效后如下图: 

我们在安装一个php语言 

温馨提示:如果下载不下来我们直接去github进行下载,因为我们这个插件都是使用wget进行下载的 

我们现在只能使用java的jar包和php,因为我们只安装了java和php的语言插件。如果想使用Python的程序,就需要安装Python的语言插件

Sonar 插件--->语言插件 (分析什么语言,你就需要安装什么语言的插件)

Sonar通过SonarQube Scanner(扫描器)来对代码进行分析 
官方文档:http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

下载扫描器插件

 
  1. [root@linux-node1 ~]# wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.8.zip
  2. [root@linux-node1 ~]# unzip sonar-scanner-2.8.zip
  3. [root@linux-node1 ~]# mv sonar-scanner-2.8 /usr/local/
  4. [root@linux-node1 ~]# ln -s /usr/local/sonar-scanner-2.8/ /usr/local/sonar-scanner

我们要将扫描器和sonar关联起来

 
  1. [root@linux-node1 ~]# cd /usr/local/sonar-scanner
  2. [root@linux-node1 sonar-scanner]# ls
  3. bin conf lib
  4. [root@linux-node1 sonar-scanner]# cd conf/
  5. [root@linux-node1 conf]# ls
  6. sonar-scanner.properties
  7. [root@linux-node1 conf]# vim sonar-scanner.properties
  8. sonar.host.url=http://localhost:9000 #sonar地址
  9. sonar.sourceEncoding=UTF-8 #字符集
  10. sonar.jdbc.username=sonar #数据库账号
  11. sonar.jdbc.password=sonar@pw #数据库密码
  12. sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8 #数据库连接地址
  13. #打开注释即可

我们现在需要找一个代码进行分析。

sonar插件提供了一个代码的库 
github:https://github.com/SonarSource/sonar-examples 
我们下载软件包:https://github.com/SonarSource/sonar-examples/archive/master.zip

解压

 
  1. [root@linux-node1 src]# unzip sonar-examples-master.zip
  2. [root@linux-node1 php]# cd sonar-examples-master/projects/languages/php
  3. [root@linux-node1 php]# cd php-sonar-runner-unit-tests/
  4. [root@linux-node1 php-sonar-runner-unit-tests]# ll
  5. total 8
  6. -rw-r--r-- 1 root root 647 Dec 14 09:57 README.md
  7. drwxr-xr-x 2 root root 51 Dec 14 09:57 reports
  8. -rw-r--r-- 1 root root 346 Dec 14 09:57 sonar-project.properties
  9. drwxr-xr-x 3 root root 31 Dec 14 09:57 src
  10. drwxr-xr-x 2 root root 25 Dec 14 09:57 tests
  11. #这里就是PHP的目录

配置文件解释: 
如果你想让我扫描,就需要在代码路径下放一个配置文件

 
  1. [root@linux-node1 php-sonar-runner-unit-tests]# cat sonar-project.properties
  2. sonar.projectKey=org.sonarqube:php-ut-sq-scanner #Key
  3. sonar.projectName=PHP :: PHPUnit :: SonarQube Scanner #这里的名称会显示在一会的web界面上
  4. sonar.projectVersion=1.0 #版本,这里的版本一会也会显示在web界面上
  5. sonar.sources=src #软件包存放路径
  6. sonar.tests=tests
  7. sonar.language=php #语言
  8. sonar.sourceEncoding=UTF-8 #字体
  9. # Reusing PHPUnit reports
  10. sonar.php.coverage.reportPath=reports/phpunit.coverage.xml
  11. sonar.php.tests.reportPath=reports/phpunit.xml

#也就是说在项目里面必须有这个配置文件才可以进行扫描

扫描 
#提示:需要在项目文件里面进行执行

 
  1. [root@linux-node1 php-sonar-runner-unit-tests]# /usr/local/sonar-scanner/bin/sonar-scanner
  2. INFO: Scanner configuration file: /usr/local/sonar-scanner/conf/sonar-scanner.properties
  3. INFO: Project root configuration file: /usr/local/src/sonar-examples-master/projects/languages/php/php-sonar-runner-unit-tests/sonar-project.properties
  4. INFO: SonarQube Scanner 2.8
  5. INFO: Java 1.8.0_111 Oracle Corporation (64-bit)
  6. INFO: Linux 3.10.0-514.2.2.el7.x86_64 amd64
  7. INFO: User cache: /root/.sonar/cache
  8. INFO: Load global repositories
  9. INFO: Load global repositories (done) | time=211ms
  10. WARN: Property 'sonar.jdbc.url' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
  11. WARN: Property 'sonar.jdbc.username' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
  12. WARN: Property 'sonar.jdbc.password' is not supported any more. It will be ignored. There is no longer any DB connection to the SQ database.
  13. INFO: User cache: /root/.sonar/cache
  14. INFO: Load plugins index
  15. INFO: Load plugins index (done) | time=3ms
  16. INFO: Download sonar-csharp-plugin-5.0.jar
  17. INFO: Download sonar-java-plugin-3.13.1.jar
  18. INFO: Download sonar-l10n-zh-plugin-1.11.jar
  19. INFO: Plugin [l10nzh] defines 'l10nen' as base plugin. This metadata can be removed from manifest of l10n plugins since version 5.2.
  20. INFO: Download sonar-scm-git-plugin-1.2.jar
  21. INFO: Download sonar-php-plugin-2.9.1.1705.jar
  22. INFO: Download sonar-scm-svn-plugin-1.3.jar
  23. INFO: Download sonar-javascript-plugin-2.11.jar
  24. INFO: SonarQube server 5.6
  25. INFO: Default locale: "en_US", source code encoding: "UTF-8"
  26. INFO: Process project properties
  27. INFO: Load project repositories
  28. .................................................
  29. .................................................

提示:我们什么都不指定就会在当面目录下扫描sonar-project.properties文件,根据配置文件进行扫描工作。扫描之后我们在web界面上就可以看到代码的扫描结果

这里的名字,版本 都是在sonar-project.properties文件中定义的 

质量阈帮我们设定好一个阈值,超过相应的阈值就算有bug 

为了让jenkins可以在构建项目的时候执行sonar,所以我们需要在jenkins上安装插件 

现在就可以进行配置,让jenkins和sonar结合在一起。这样我们构建项目的时候就会进行代码检测

点击保存

配置 

编辑我们的项目,选择最下放。找到构建 

对PHP文件进行复制

 
  1. [root@linux-node1 php-sonar-runner-unit-tests]# cat /usr/local/src/sonar-examples-master/projects/languages/php/php-sonar-runner-unit-tests/sonar-project.properties
  2. sonar.projectKey=org.sonarqube:php-ut-sq-scanner
  3. sonar.projectName=PHP :: PHPUnit :: SonarQube Scanner
  4. sonar.projectVersion=1.0
  5. sonar.sources=src
  6. sonar.tests=tests
  7. sonar.language=php
  8. sonar.sourceEncoding=UTF-8
  9. # Reusing PHPUnit reports
  10. sonar.php.coverage.reportPath=reports/phpunit.coverage.xml
  11. sonar.php.tests.reportPath=reports/phpunit.xml


Analysis properties 分析的参数

填写完毕后,我们点击保存 

我们选择立即构建 

提示:此时的SonarQube是无法点击的

点击Console Output可以查看构建输出的内容 

#提示:只要没有error就可以


构建完成后,我们发现这里的SonarQube可以点击,我们点击SonarQube就会链接到192.168.56.11:9000 就是代码查看器的地址 

现在我们已经做到了可以在git上进行拉取代码。并进行检测

我们还可以配置一个构建失败发送邮箱: 

在我们项目里面设置构建后操作,选择E-mail Notification 

温馨提示:使用163邮箱发送的通知被163服务器退回了,因此我将设置在jenkins的邮箱改成了QQ邮箱

QQ:邮箱需要设置如下: 

1、需要开启POPE3/SMTP服务 
2、在jenkins上配置的密码我们需要点击生成授权码进行使用

QQ邮件默认会收到如下提示: 

当再次构件成功时,邮件内容如下: 

持续集成之代码质量管理-Sonar [三]的更多相关文章

  1. 持续集成之代码质量管理-Sonar

    原文:http://blog.csdn.net/abcdocker/article/details/53840582 Sonar介绍 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Son ...

  2. Jenkins+maven+git+sonar 系统持续集成&代码单測管理

    Jenkins+maven+git+sonar 系统持续集成&代码单測管理 Jenkins的安装 Jenkins是基于Java开发的一种持续集成工具,用于监控持续反复的工作.功能包含: 1.持 ...

  3. DevOps之持续集成SonarQube代码质量扫描

    一.SonarQube介绍       SonarQube是一个用于代码质量检测管理的开放平台,可以集成不同的检测工具,代码分析工具,以及持续集成工具.SonarQube 并不是简单地把不同的代码检查 ...

  4. 代码质量管理-Sonar

    1.Sonar 摘要 Sonar 是一个用于代码质量管理的开放平台.通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具. 与持续集成工具(例如 Hudson/Jenkin ...

  5. 通过静态分析和持续集成 保证代码的质量 (Helix QAC)2

    续上.... 第二章 部署示例:Jenkins and Helix QAC工具 第一节 Jenkins 作为持续集成系统 现在有很多持续集成工具,既有免费的,也有商业的.最近的研究显示,Jenkins ...

  6. 通过静态分析和持续集成 保证代码的质量 (Helix QAC)1

    前言 现代软件开发团队面临着很多挑战,这些挑战包括:产品交付期限越来越紧,团队的分布越来越广,软件的复杂度越来越高,而且对软件的质量要求越来越高. 本文分为两个章节.第一章讨论持续集成的原理,持续集成 ...

  7. Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(三):搭建jenkins集群环境

    写在前面 大家可以看到本文的配图,左边是jenkins单机环境,右边是jenkins集群.个中区别,不言而喻,形象生动. 前面我分别介绍了.net core 程序的多种部署方式(无绝对孰优孰劣): 1 ...

  8. Jenkins+Sonar搭建持续集成和代码质量检查环境

    Jenkins+Sonar搭建 一.相关环境及下载地址 系统:Ubuntu JDK:1.8 MySQL:5.7 软件包: jenkins_2.121.3_all.deb sonarqube-7.3.z ...

  9. 【持续集成】GIT+jenkins+sonar——GIT

    一.GIT基础 1.1 git简介 linus用C语言编写 2005年诞生 分布式管理系统 速度快.适合大规模.跨地区多人协同开发 1.2 本地管理.集中式.分布式 1.3 git安装 #CentOS ...

随机推荐

  1. C#打印图片

    打印的原理是:生成mdi文件,系统碰到mdi的时候会自动以打印的方式处理.所以,不管用什么模板,什么方式:能在PrintPage事件处理中,生成一张要打印内容的图片就OK了! C#实现打印源码如下: ...

  2. delphi时间日期函数

    unit DateProcess; interface const DayOfWeekStrings: ..] of String = ('SUNDAY', 'MONDAY', 'TUESDAY', ...

  3. 在后台运行rtorrent

    本来一直是用transmission做PT的客户端的,但是transmission的功能实在是太弱了,web-gui显示的信息也实在是太有限.在别人的推荐下,总算下定决心换rtorrent+wtorr ...

  4. How to update jQuery Mobile in Dreamweaver CS6

    来源:http://wpguru.co.uk/2013/01/how-to-update-jquery-mobile-in-dreamweaver-cs6/ Since the release of ...

  5. Property's synthesized getter follows Cocoa naming convention for returning

    Property's synthesized getter follows Cocoa naming convention for returning.   今天早上在整理代码的时候发现了如上警告. ...

  6. Linux ftp 命令

    一.ftp的get命令和mget命令有何不同? get一次只下载一个文件:mget一次可以下载多个文件,而且支持通配符,需要注意的是在mget的时侯,需要对每一个文件都选择y/n,如果想不交互的下载全 ...

  7. 实习医生格蕾第十三季/全集Grey’s Anatomy迅雷下载

    英文全名Grey's Anatomy,第13季(2016)ABC.本季看点:<实习医生格蕾>(Grey’s Anatomy)上季终集里,又一名资深演员离开了——Sara Ramirez扮演 ...

  8. springboot 表单校验

    实体: @Entity public class User implements Serializable { /** * 编号 */ @Id @GeneratedValue private Long ...

  9. 架构模式逻辑层模式之:表模块(Table Model)

    表模块和领域模型比,有两个显著区别: 1:表模块中的类和数据库表基本一一对应,而领域模型则无此要求: 2:表模块中的类的对象处理表中的所有记录,而领域模型的一个对象代表表中的一行记录: 一般情况下,我 ...

  10. HTML5 Geolocation API地理定位整理(二)

    Geolocation 实例demo 1.使用watchPosition()监听客户端位置 var watchOne=null; if (navigator.geolocation) { //watc ...