概述
随着工作的要求,devops作为今年工作的一个重点,由此也引发了自己对于devops相关的工具和技术的学习和实践。基于上述背景,这个系列将逐步的介绍SVN的安装和配置、jenkins安装和配置、reviewboard、findbugs、checkstyle、sonar、testng、mockito等。【每个合格的程序员都是耐操的】
上一节说了如何通过jenkins进行构建任务集成,现在说一下如何集成findbugs,对java class类进行静态检查。
一、目标
findbugs是对代码进行静态检查,发现代码中的可能存在的缺陷和不规范的地方,减少隐患,当然findbugs是无法检查代码逻辑的,代码逻辑的检查,应该属于测试范畴。
下面说一下本次实践的目标:
1、在jenkins里面集成 findbugs
2、通过findbugs检查示例代码
3、了解规则含义
4、查找规则是否启用的方法
5、自定义规则的编码方法(简单了解)
二、findbugs的安装
在安装之前,简单说明一下环境,和上一节一样,在linux的jenkins上进行findbugs的安装。
首先从jenkins,系统管理进入管理插件界面
我们安装中间的Findbugs Plug-in
安装好了后,在“构建”这里,Goals 项目 填入: findbugs:findbugs 这里填入后,maven在构件项目的时候,会带入这个参数
如果构建的时候,会报出如下问题,说明可能安装没有完全:
回到jenkins系统首页,会发现,如果安装不完整,会有提示
这里的提示是说,少装了一个包,重新进入到插件安装界面,搜索Static Analysis,安装这个插件,就解决analysis-core V1.86 包没有安装的问题。
需要说明的是,如果网络安装失败,确定是网络原因的话,可以从插件的高级功能里面,选取本地安装包,上载到jenkins里。在上述处理后,jenkins进行任务集成,发现构件失败
这里主要是pom.xml还没有修改,可以按下面内容修改
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.newland</groupId>
<artifactId>StudyKafkaMavenTest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>kafka-demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.8.2.0</version>
</dependency>
</dependencies>
<build>
<defaultGoal>compile</defaultGoal>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<findbugsXmlOutput>true</findbugsXmlOutput>
<findbugsXmlWithMessages>true</findbugsXmlWithMessages>
<xmlOutput>true</xmlOutput>
</configuration>
</plugin>
</plugins>
</build>
</project>
如果发现构建成功,但是findbugs 没有动作, 修改配置,在“构建”这里,选中“Publish FindBugs analysis results”
这里results 可以为空,default的会生成如 findbugsXml.xml 和 findBugs.xml 。 这个时候,我们可以继续看一下任务的面板
上图中, 出现FindBugs Warnings 了,可以点开查看里面的内容,下面列出案例中的具体情况
修改文件后,我们重新构建,现在可以看到,解决了问题后,findbugs 不在显示bug列表
三、findbugs的规则
findbugs定义了很多规则,下面具一些具体了例子, 如下面这些
Security 关于代码安全性防护
1.Dm: Hardcoded constant database password (DMI_CONSTANT_DB_PASSWORD)
代码中创建DB的密码时采用了写死的密码。
2.Dm: Empty database password (DMI_EMPTY_DB_PASSWORD)
创建数据库连接时没有为数据库设置密码,这会使数据库没有必要的保护。
3.HRS: HTTP cookie formed from untrusted input (HRS_REQUEST_PARAMETER_TO_COOKIE)
此代码使用不受信任的HTTP参数构造一个HTTP Cookie。
4.HRS: HTTP Response splitting vulnerability (HRS_REQUEST_PARAMETER_TO_HTTP_HEADER)
在代码中直接把一个HTTP的参数写入一个HTTP头文件中,它为HTTP的响应暴露了漏洞。
5.SQL: Nonconstant string passed to execute method on an SQL statement (SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE)
该方法以字符串的形式来调用SQLstatement的execute方法,它似乎是动态生成SQL语句的方法。这会更容易受到SQL注入攻击。
6.XSS: JSP reflected cross site scripting vulnerability (XSS_REQUEST_PARAMETER_TO_JSP_WRITER)
在代码中在JSP输出中直接写入一个HTTP参数,这会造成一个跨站点的脚本漏洞。
在上面的例子中,可以看到 每个规则,都用DMI_CONSTANT_DB_PASSWORD 这样的方式来表示。由于规则众多,实际使用时,需要根据自己的要求进行裁剪
四、findbugs的规则配置
findbugs的规则比较多,可以进行裁剪配置,这是通过配置 exclude xml 来实现的,在pom.xml 下,增加 exlcude.xml 配置
在pom.xml 平级的目录,建立一个规则例外文件
findbugs-exclude.xml, 具体内容如下
就是要把你排除检查的规则,写进入,注意,如果/Match 节点里面内容不配置,那就是全部都不纳入检查。<FindBugsFilter> <Match> <!-- <Bug pattern="URF_UNREAD_FIELD,UUF_UNUSED_FIELD,DLS_DEAD_LOCAL_STORE,UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD,RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE,URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD,RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE"/> --> <Bug pattern="DM_DEFAULT_ENCODING"></Bug> <Bug pattern="DLS_DEAD_LOCAL_STORE"/> <!-- <Bug pattern="UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD"/> <Bug pattern="RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE"/> --> </Match> </FindBugsFilter>
同样,可以设置include文件
在pom.xml 中设置:
<configuration> <excludeFilterFile>findbugs-exclude.xml</excludeFilterFile> <includeFilterFile>findbugs-include.xml</includeFilterFile> </configuration>
在上面的案例里面, DM_DEFAULT_ENCODING,就是扫出来的内容,可以配置后,进行规则排除,下面图中,bugs趋势图中的回落就是做实验的效果
五、自定义规则
最后简单介绍一下自定义规则的开发流程:
1、首先下载findbugs 源码包
2、开发自己的规则,编译
3、修改findbugs里面的规则文件findbugs-plugin.jar中message.xml,findbugs.xml,z加入二进制的class 文件
4、打包成功后,在可运行版本的findbugs中替换原来的/lib/findbugs.jar
最后
以上就是伶俐月饼为你收集整理的Devops学习实践(三) jenkins集成findbugs一、目标 二、findbugs的安装 三、findbugs的规则 四、findbugs的规则配置 五、自定义规则的全部内容,希望文章能够帮你解决Devops学习实践(三) jenkins集成findbugs一、目标 二、findbugs的安装 三、findbugs的规则 四、findbugs的规则配置 五、自定义规则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复