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

2023-11-07

随着工作的要求,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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Devops学习实践(三) jenkins集成findbugs 的相关文章

随机推荐

  • Opencv 模块计算机类型“x64”与目标计算机类型“X86”冲突

    Visual Studio 2012 模块计算机类型 x64 与目标计算机类型 X86 冲突 在使用Visual Studio 2012编译运行OpenCV的时候 出现错误 fatal error LNK1112 模块计算机类型 X86 与
  • Jmeter在windows10命令行启动显示此时不应有

    Jmeter在windows10命令行启动显示此时不应有 Jmeter配置路径正常 直接运行目录下的Jmeter bat也能运行 但是在命令行输入Jmeter便一直显示此时不应有 查了网上这种问题的解决方法 都是说环境变量路径问题 1 路径
  • python 正则表达式 compile_使用compile()函数编译正则表达式【Python技术文章】

    如果需要对一个正则表达式重复使用 那么可以使用compile 函数对其进行预编译 以避免每次编译正则表达式的开销 complie 函数语法格式如下 compile pattern flags 0 上述格式中的参数pattern表示一个正则表
  • input 输入框 focus更改样式

    input标签的border和outline 想要实现input在触发焦点时更改样式 通常会想到使用 focus选择器 但当使用border去更改样式时 会发现失效了 input type text focus border 1px sol
  • 内部振荡器、无源晶振、有源晶振有什么区别?

    单片机要运行起来 必须有一个时钟信号 就好像人的心跳 这个时钟信号可以由无源晶振提供 可以由有源晶振提供 目前大部分的单片机也集成了内部振荡器 今天就来聊聊这三者的区别 1 内部振荡器 单片机内部集成的振荡器 一般为RC振荡器 好多人叫 内
  • AlexNet-深度卷积神经网络(CNN卷积神经网络)

    文章目录 深度卷积神经网络 AlexNet AlexNet 模型说明 激活函数选定 模型定义 读取数据集 训练AlexNet 小结 深度卷积神经网络 AlexNet 2012年 AlexNet横空出世 它首次证明了学习到的特征可以超越出手工
  • cJSON.c 和cJSON.h (进行了额外的封装)

    1 cJSON h cJSON h Copyright c 2009 2017 Dave Gamble and cJSON contributors Permission is hereby granted free of charge t
  • EMI原理、测量、解决

  • 进制和编码

    目标 了解计算机中一些必备的尝试知识 了解常见名词背后的意义 1 python的运行方式 交互式运行 脚本式运行 2 进制 2 1 进制的转换 计算机中底层的所有数据都是0101010101的形式存在的 八进制无法直接转为2进制 十进制转其
  • 鸡兔同笼问题南阳理工学院acm64题

    问题如下 鸡兔同笼 时间限制 3000 ms 内存限制 65535 KB 难度 1 描述 已知鸡和兔的总数量为n 总腿数为m 输入n和m 依次输出鸡和兔的数目 如果无解 则输出 No answer 不要引号 输入 第一行输入一个数据a 代表
  • centos哪个版本稳定_CentOS VS Ubuntu,谁才是更好的 Linux 版本?

    几乎所有新手刚接触 Linux 时 都会被它众多的发行版本搞得一头雾水 截至目前 Linux 已经有几百个发行版本 从技术上来说 Linux 只是一个内核 内核指的是一个提供设备驱动 文件系统 进程管理 网络通信等功能的系统软件 并不是一套
  • 混合式步进电机的细分驱动(电流方式、电压方式)及Simulink仿真对比

    两相混合式步进电机的最简单模型和驱动方式 两相混合式步进电机有四个连接点 分别为a a b b a 和a 连接绕组A的两端 b 和b 连接绕组B的两端 电机的结构可以简化为如下的图示结构 电机转子可以看成一个磁铁 电机的定子上标有a b a
  • OJ刷题 第十三篇

    22102 将字符串反序 时间限制 1 秒 内存限制 128 MB 请将一个给定的字符串反序 字符长度为1到10000 且有可能包含空格 输入 反序前的字符串 输出 反序后的字符串 样例 输入 abcd 输出 dcba 答案 C 版本1 掌
  • 2021年第十二届蓝桥杯省赛A组题解(C/C++)

    2021年蓝桥杯省赛A组题解 C C 来自微信公众号 算法梦工厂 二维码见文末 欢迎加入蓝桥杯备赛群 768245918 获取往届试题 测试数据 算法课程等相关资源 A 卡片 问题描述 答案 3181 解析 涉及知识点 枚举 十进制拆分 做
  • 远程链接redis时出现错误: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

    Could not connect to Redis at 192 168 204 100 6379 由于连接方在一段时间后没有正确答复或连接的主机没有反应 连接尝试失败 原因 1 防火墙没有关闭 导致访问不了 解答方法一直接关闭防火墙 不
  • 软件优化Flash擦除时间长的方法

    概述 通过地址的偏移 巧妙的避开Flash擦除长时间占用CPU的使用 MCU STM32H743 编译环境 Keil 说明 基础知识可以看 Flash读写 其中包含了本代码涉及到的所有函数 原理 以空间换取时间 正文 首先要明白Flash擦
  • SpringBoot学习(汇总版)

    一 SpringBoot简介 1 1 Spring能做什么 1 1 1 Spring的能力及生态 1 1 2 Spring5的响应式编程 1 2 SpringBoot是什么 百度百科 Spring Boot是由Pivotal团队提供的全新框
  • MYSQL物理结构

    Mysql的物理结构 日志文件 error log 记录mysql启动 关闭和运行时产生的重大的错误的信息 如果mysqld警告一个表需要自动的检查或者修复 也会记录一个错误日志 可以使用 log error file name选项来指定错
  • Oracle数据库对象---你diss了嘛

    1 数据库对象 2 同义词 3 序列 4 视图 5 索引 Oracle中比较有特色的 同义词 序列 1 数据库对象 又称模式对象 是逻辑结构的集合 最基本的数据库对象就是表 数据逻辑结构 指的是存在一种或多种特定关系的数据元素集合 通俗点
  • Devops学习实践(三) jenkins集成findbugs

    随着工作的要求 devops作为今年工作的一个重点 由此也引发了自己对于devops相关的工具和技术的学习和实践 基于上述背景 这个系列将逐步的介绍SVN的安装和配置 jenkins安装和配置 reviewboard findbugs ch