您的位置:首页 > 编程语言 > Python开发

Windows+SonarQube+Jenkins+Git+SonarPython配置持续集成的代码质量平台

2017-08-10 10:59 1076 查看

Windows+Sonar+Jenkins+Git+SonarPython配置持续集成的代码质量平台

本文以Python项目为例,构建了一个基于Windows+Sonar+Jenkins+Git的持续集成且支持代码自动分析的平台

1.1 Java中主流代码分析工具对比

@PMDFindbugsCheckStyleSonar
运行方式IDE插件,独立运行IDE插件,独立运行,Findbugs+Jenkins CI集成运行IDE插件独立运行,需要单独的MySQL源
运行原理基于源代码分析,主要面向安全编码规则,如“避免声明同名变量”,包括风格类、类型使用等等,具备一定的数据流分析和路径分析能力。基于字节码分析,大量使用数据流分析技术,侧重运行时错误检测,如空指针引用等,分析深度大于PMD及Checkstyle。基于源代码,与pmd类似,但更侧重编码的语法风格,分析深度不及PMD。定位是代码质量平台,本身不进行代码分析,但可以集成各个静态分析工具以及其他软件开发测试工具,并基于集成工具的结果数据按照一定的质量模型,如iso-9126,对软件的质量进行评估。
目的检查Java源文件中的潜在问题基于Bug Patterns概念,查找javabytecode(.class文件)中的潜在bug检查Java源文件是否与代码规范相符作为代码质量平台,通过集成工具对软件质量进行评估
检查项空try/catch/finally/switch语句块,未使用的局部变量、参数和private方法,空if/while语句,过于复杂的表达式,不必要的if语句等,复杂类主要检查bytecode中的bug patterns,如NullPoint空指针检查、没有合理关闭资源、字符串相同判断错(==,而不是equals)等Javadoc注释命名规范多余没用的ImportsSize度量,如过长的方法缺少必要的空格Whitespace重复代码在其他代码质量工具的基础上,sonar不仅关注了常规静态bug,还关注到了如代码质量、包与包,类与类之间的依赖情况、代码耦合情况、类,方法。文件的复杂度、代码中是否包含大量复制粘贴的代码是质量低下的,关注到了项目代码整体的健康情况。
优点插件可以配置规则,有独立显示问题的视图 规则严格,但可以通过修改规则集定义需要的规则FindBugs 大多数提示是有用且值得更改的 提供图形界面的独立程序,对jar进行检测,有报告生成,非常方便规则严格,但可以通过修改规则集定义需要的规则High级别的bug都是较为实用的bug,且能覆盖到一些性能方面的问题
缺点配置无查找功能,但可以通过缩写快速找到某个规则 很多功能插件没有实现,可独立使用,但无法同时修改源码只能做检查,不能修改代码,可配合Jalopy使用修改代码 插件自定义规则没有查找功能,查找规则麻烦其本身规则的实用程度不如Findbugs

1.2 SonarQube介绍

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

在对其他工具的支持方面,Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse 和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。此外,Sonar 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。

Sonar 为代码的质量管理提供了一个平台,对传统的代码静态检测如 PMD、FindBugs 等工具进行整合,可以说是目前最强大的代码质量管理工具之一。

Sonar 目前支持的语言:C/C++/JavaScript/C#/Java/COBOL/PL/SQL/PL/I/PHP/ABAP/VB.NET/VB6/Python/RPG/Flex/Objective-C/Swift/Web/XML

1.3 SonarQube整体架构:



2.1 部署SonarQube

下载SonarQube

将SonarQube压缩包解压缩,执行/bin/windows-x86-64/StartSonar.bat 即完成了Sonar的启动

打开浏览器,登入http://localhost:9000

安装SonarPython插件

[可选安装]安装Chinese Pack差价可以获得中文支持

插件的安装方法:

点击右上角的Login

键入默认管理员用户名及密码 admin ,登陆

点击Administration,找到System->Update Center

搜索插件名字,点击install,然后点击Restart重启Sonar,完成安装。卸载同理

2.2 部署SonarQube Scanner

将 SonarQube Scanner 压缩包解压到位置(如C:\sonar-scanner),将bin目录添加到环境变量中(C:\sonar-scanner\bin)

(测试)打开CMD,cd到项目根目录,键入

sonar-scanner -Dsonar.projectKey=自定义projectkey -Dsonar.sources=. -Dsonar.projectName=自定义projectname -sonar.projectVersion=1.0


官方文档有一个坑,就是并没有定义projectName及projectVersion,实际测试中是必须定义的

其中-D 用来定义变量,加入-X 可以加入更多debug信息

若没有出错,说明部署成功,打开浏览器进入Dashboard,可以看到刚新建的项目代码分析结果。

2.3 部署Jenkins

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

下载Jenkins,选择Windows

运行Jenkins安装文件,安装完成后会跳出部署设置(默认地址:http://127.0.0.1:8080

第一次会要求键入一个admin密码,这个密码存在Jenkins\secrets\initialAdminPassword 这个文件中,用记事本打开,复制密码粘贴到浏览器中即可,同样的,日后如果忘记管理员密码,也可以找到这个文件使用这个密码登录管理员账户。

安装 SonarQube Scanner for Jenkins 插件

进入 系统管理->Global Tool Configuration ,新增SonarQube Scannner,不勾选自动安装

Name键入SonarQube Scanner

SONAR_RUNNER_HOME键入SonarQube的绝对目录(如C:\sonar-scanner

点击Save保存

Jenkins插件安装方法

进入 系统管理->插件管理->可选插件,在搜索框中搜索需要安装的插件,点击直接安装,然后重启Jenkins

2.4 本文省略但必须做的步骤:

安装Git

2.5 将Git项目添加到Jenkins并自动完成代码检测

打开Jenkins控制台->新建项目->选择 构建一个自由风格的软件项目 ->输入项目名,下一步

源码管理选择Git

Repository URL键入项目Git地址 如 https://github.com/HiddenStrawberry/JDPackage.git

Credentials 为认证方式,点击Add添加认证, 这里可以选择多种认证方式,本文选择Github用户名/密码登录,所以选择Username with Password,填入Github的Username及Password,点击Add,然后选择刚添加的账户。

点击下方构建->新建构建步骤-> Execute SonarQube Scanner

SonarQube Scanner选择SonarQube Scanner

Analysis properties键入如下内容:

sonar.projectKey=myjdp
sonar.projectName=myjdp
sonar.projectVersion=1.0
sonar.sources=.


注意中间没有逗号,key,name,version为自定义,其他选项留空(本例),点击保存


5. 在控制台中找到项目,点击立即构建,若构建后状态灯为蓝色,即为构建成功,若为红色,进入Build History构建失败的#次数,找到左边的Console Output,即可查看控制台中输出的错误原因。

6. 在控制台中找到项目,点击SonarQube,即可查看代码分析内容。

3.1 性能分析:

在2G/双核E5 V3 2.4GHz 新配置环境主机 上运行上述64位服务,物理内存占用约为80%,在运行构建时,CPU占用峰值可达80%,内存占用峰值达90%,由此可见SonarQube在代码分析时占用资源较大。

4.1 引用:

如何静态测试 Java 代码?

Findbugs使用

PMD使用

Eclipse静态分析插件使用

PMD、FindBug、checkstyle、sonar这些代码检查工具的区别?各自的侧重点是什么?

FindBugs、PMD和CheckStyle对比

构建基于Jenkins + Github的持续集成环境

SonarPython - Plugins - Doc SonarQube
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐