Devops学习实践(三) jenkins集成findbugs

来源:互联网 发布:浙江卫视网络在线直播 编辑:程序博客网 时间:2024/06/05 22:44

随着工作的要求,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, 具体内容如下
     
<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>
就是要把你排除检查的规则,写进入,注意,如果/Match 节点里面内容不配置,那就是全部都不纳入检查。
同样,可以设置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

阅读全文
0 0
原创粉丝点击