Jenkins与SonarQube 集成插件的安装与配置 Jenkins 是一个支持自动化框架的服务器,我们这里不做详细介绍。Jenkins 提供了相关的插件,使得 SonarQube 可以很容易地集成 ,登陆 jenkins,点击”Manage Jenkins”,选择“Mange Plugins”点击“Avzilable”,搜索“Sonar”选中“SonarQube Scanner for Jenkins”点击安装插件,安装后好如下图: 点击”Manage Jenkins”,选择“Configure System”将SonarQube server的信息填入,点击保存。如图: 在jenkinse服务器上下载sonar-scanner,下载地址:https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip
SonarQube为静态代码检查工具,采用B/S架构,帮助检查代码缺陷,改善代码质量,提高开发速度,通过插件形式,可以支持Java、C、C++、JavaScripe等等二十几种编程语言的代码质量管理与检测。 通过客户端插件分析源代码,sonar客户端可以采用IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式,并通过各种不同的分析机制对项目源代码进行分析和扫描,并把分析扫描后的结果上传到sonar的数据库,通过sonar web界面对分析结果进行管理 架构图 可以从七个维度检测代码质量: (1)复杂度分布(complexity):代码复杂度过高将难以理解 (2) 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方 (3) 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况 (4) 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范 (5) 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读 (6) 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug (7) 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度 SonarQube安装 搭建分两大步:服务端跟客户端 服务端 ◆进入条件: 1、准备Java环境,这里略去配置 2、需要安装MySQL (支持数据库种类见sonar.properties),这里略去配置 3、sonar https://docs.sonarqube.org ◆数据库配置: 1、创建sonar数据库 2、选择conf/sonar.properties文件,配置数据库设置,默认已经提供了各类数据库的支持,这里选择MySQL数据库,默认已经准备了支持各种数据库,只需将MySQL注释部分去掉,顺便改了sonarQube的端口sonar.web.port=1011 sonar.jdbc.url=jdbc:mysql://localhost:1010/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance sonar.jdbc.driver=com.mysql.jdbc.Driver sonar.jdbc.username=root sonar.jdbc.password=root ◆sonar 将下载的soar安装包后,解压,随意放置一个地方 注:JDK的环境和系统环境,要对应,我是windows系统,JDK位64位,选windows-x86-64 进入bin目录后,点击SonarStart.bat,页面输入http://localhost:1011/,进入页面,配置成功 客户端 前面已经说了客户端可以通过IDE插件、Sonar-Scanner插件、Ant插件和Maven插件方式进行扫描分析,这一节先记录Sonar-Scanner扫描 ◆下载sonar-scanner解压,将bin文件加入环境变量path中如我的路径E:\sonar\sonar-scanner\bin将此路径加入path中 ◆修改sonar scanner配置文件, conf/sonar-scanner.properties。根据数据库使用情况进行取消相关的注释即可,同时需要添加数据库用户名和密码信息,即配置要访问的sonar服务和mysql服务器地址 ◆创建sonar-project.properties文件,以java工程为例在工程根目录下新建立一个sonar-project.properties配置文件
如今几乎每个人都听说过Linux中所谓的”零拷贝”特性,然而我经常碰到没有充分理解这个问题的人们。因此,我决定写一些文章略微深入的讲述这个问题,希望能将这个有用的特性解释清楚。在本文中,将从用户空间应用程序的角度来阐述这个问题,因此有意忽略了复杂的内核实现。
流Streams这个概念是在php4.3引进的,是对流式数据的抽象,用于统一数据操作,比如文件数据、网络数据、压缩数据等,以使可以共享同一套函数, php的文件系统函数就是这样的共享,比如file_get_contents()函数即可打开本地文件也可以访问url就是这一体现。简单点讲,流就是表现出流式数据行为的资源对象。 以线性方式进行读写,并可以在流里面任意位置进行搜索。 流有点类似数据库抽象层,在数据库抽象层方面,不管使用何种数据库,在抽象层之上都使用相同的方式操作数据, 而流是对数据的抽象,它不管是本地文件还是远程文件还是压缩文件等等,只要来的是流式数据,那么操作方式就是一样的 有了流这个概念就引申出了包装器wrapper这个概念,每个流都对应一种包装器, 流是从统一操作这个角度产生的一个概念,而包装器呢是从理解流数据内容出发产生的一个概念,也就是这个统一的操作方式怎么操作或配置不同的内容; 这些内容都是以流的方式呈现,但内容规则是不一样的,比如http协议传来的数据是流的方式,但只有http包装器才理解http协议传来的数据的意思, 可以这么理解,流就是一根流水的管子,只不过它流出的是数据,包装器就是套在流这根管子外层的一个解释者,它理解流出的数据的意思,并能操作它 官方手册说:“一个包装器是告诉流怎么处理特殊协议或编码的附加代码”明白这句话的意思了吗?
一个php应用程序往往是由多个文件构成的,如果能把他们集中为一个文件来分发和运行是很方便的,这样的列子有很多,比如在window操作系统上面的安装程序、一个jquery库等等,为了做到这点php采用了phar文档文件格式,这个概念源自java的jar,但是在设计时主要针对 PHP 的 Web 环境,与 JAR 归档不同的是Phar 归档可由 PHP 本身处理,因此不需要使用额外的工具来创建或使用,使用php脚本就能创建或提取它。phar是一个合成词,由PHP 和 Archive构成,可以看出它是php归档文件的意思。 关于phar的官网文档请见http://php.net/manual/en/book.phar.php