Devops學習實踐(三) jenkins集成findbugs

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章