Devops學習實踐(五)jenkins 與 ant 、findbugs 配合使用
之前jenkins裡面介紹用findbugs主要是採用maven方式,但是很多情況下,工程專案採用的ant進行編譯和打包的,通過jenkins ant findbugs結合的方式也是可以進行持續整合的。 jenkins 的特點就是能將這些工具方便的整合起來,為了與工程本身的耦合減少,所以思路是 ant 編譯工程 與ant 呼叫findbugs 通過jenkins分2步進行,這樣方便靈活性更高。
這裡介紹一下ant 的安裝和配置
一、目標和環境
準備在centos6.5 上安裝ant ,配合jenkins 使用,安裝環境如下: 192.168.136.144 centos 6.5
通過jenkins 呼叫 ant 和findbugs 進行工程的jar包或者class 檢查
二、ant 的安裝和配置
1、下載ant
去ant 官網下載所需要的ant 包,URL為:http://ant.apache.org/bindownload.cgi
因為是在centos上安裝,所以選擇的包是:
2、部署和配置
將下載的包上傳到目標伺服器,使用tar 進行解壓:
tar -vxf apache-ant-1.10.1-bin.tar.gz
解壓後的目錄:/home/nmc/dev/apache-ant-1.10.1 有些同學喜歡放到 /opt 目錄下,有些喜歡放到 /usr 目錄,放哪裡看個人喜好。 我是放到 /usr/ant ,所以執行: mv /home/nmc/dev/apache-ant-1.10.1 /usr/ant
下一步進行配置:
vi /etc/profile
在這個配置檔案中,進行如下配置:
export ANT_HOME=/usr/ant
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
儲存後,退出檔案編輯,然後執行:
source /etc/profile
執行這句命令的目的是不啟動,立刻生效
最後,驗證一下ant 命令是否成功,我們可以執行一下ant ,如果提示沒有build.xml 說明ant 本身已經安裝配置好了,也可以用ant -version 來檢視是否能正確返回版本資訊。
[[email protected] apache-ant-1.10.1]# ant
Buildfile: build.xml does not exist!
Build failed
[[email protected] apache-ant-1.10.1]# ant -version
Apache Ant(TM) version 1.10.1 compiled on February 2 2017
三、findbugs的安裝和配置
由於findbugs 3.0 需要java 1.7配合,考慮到我們實際工作中,工程專案眾多,存在java 1.6 ,1.7, 1.8 並存的情況,所以就採用findbugs 2.0.2(後續證明這是個錯誤選擇,因為2.0.2對1.8 不支援,權衡利弊,所以最後所有工程都需要是用java 1.7 及以上版本。)
1、下載fingbugs
通過下面URL: https://sourceforge.net/projects/findbugs/files/findbugs/2.0.2/ 選擇 findbugs-2.0.2.tar.gz 下載,下載傳到centos伺服器144上,並解壓
2、部署
將解壓後的目錄,通過mv的方式 放置到你想要的目錄,本例中為 : /home/nmc/dev/devops/findbugs
其實findbugs目錄下,只需要留有lib 目錄,其他目錄和檔案都可以刪除(特指在用ant 呼叫的情況),另外,還需要有一個ant 呼叫的build 檔案,本例子中findbugsbuild.xml
<?xml version="1.0" ?>
<project name="check" default="default" basedir=".">
<property name="src.dir" value="${basedir}/src" />
<property name="class.dir" value="${basedir}/WebRoot/WEB-INF/classes" />
<property name="dist.dir" value="${basedir}/dist" />
<property name="findbugs.dir" value="/home/nmc/dev/devops/findbugs"/>
<path id="findbugs.path">
<fileset dir="${findbugs.dir}">
<include name="**/*.jar" />
</fileset>
</path>
<!-- =================================================================== -->
<!-- Findbugs build -->
<!-- =================================================================== -->
<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" classpathref="findbugs.path" />
<target name="findbugs" >
<mkdir dir="${basedir}/findbugs" />
<findbugs home="${findbugs.dir}" output="xml" outputFile="${basedir}/findbugs/findbugs_errors.xml">
<sourcePath path="${src.dir}" />
<class location="${class.di\r}" />
</findbugs>
</target>
<target name="default" depends="findbugs">
</target>
</project>
findbugs 目錄情況如下:[[email protected] findbugs]# ls
findbugsBuid.xml lib
[[email protected] findbugs]#
3、手工驗證findbugs正常工作
進入測試檢查的工程,拷貝findbugsBuid.xml
到工程目錄,執行 ant -file findbugsBuid.xml
[[email protected] cwq_testproject1]# ant -f findbugsBuid.xml
Buildfile: /home/nmc/dev/devops/jenkins/workspace/cwq_testproject1/findbugsBuid.xml
findbugs:
[findbugs] Executing findbugs FindBugsTask from ant task
[findbugs] Running FindBugs...
[findbugs] The following classes needed for analysis were missing:
[findbugs] kafka.consumer.ConsumerConfig
[findbugs] kafka.javaapi.consumer.ConsumerConnector
[findbugs] kafka.consumer.KafkaStream
[findbugs] kafka.consumer.ConsumerIterator
[findbugs] kafka.message.MessageAndMetadata
[findbugs] kafka.consumer.Consumer
[findbugs] kafka.producer.ProducerConfig
[findbugs] kafka.producer.KeyedMessage
[findbugs] kafka.javaapi.producer.Producer
[findbugs] kafka.serializer.StringEncoder
[findbugs] Warnings generated: 1
[findbugs] Missing classes: 9
[findbugs] Calculating exit code...
[findbugs] Setting 'missing class' flag (2)
[findbugs] Setting 'bugs found' flag (1)
[findbugs] Exit code set to: 3
[findbugs] Java Result: 3
[findbugs] Classes needed for analysis were missing
[findbugs] Output saved to /home/nmc/dev/devops/jenkins/workspace/cwq_testproject1/findbugs/findbugs_errors.xml
default:
BUILD SUCCESSFUL
Total time: 4 seconds
[[email protected] cwq_testproject1]#
執行後,出現BUILD SUCCESSFUL 就表示成功了。
四、jenkins中配置
jenkins 中構件工程這塊就不細說了,只描述一下工程構件基本配置後,如何加入findbugs
1、 新增構建
在原來的構建ant build 動作裡面新增一個 拷貝動作,目的是在ant 編譯工程後,拷貝程式碼走查的配置檔案,到本工程中
在這個構件動作下,新增一個ant 構建動作,某種程度上,jenkins 就是一個提供介面進行各種動作串聯的工具。
然後,在構建後的動作裡面,釋出一下findbugs的結果(事先要在jenkins中安裝findbugs外掛,具體看前面的資料)
這些配置好後,就可以儲存,進行構建了。
注意findbugs的趨勢圖,需要構建2次後才會出來,如果一切順利,大家看到構建趨勢圖和findbugs的連結,點選連結可以檢視具體的bugs項
五:補充:
1、 findbugs 2.0.2報錯
[findbugs] Unable to get XClass for java/lang/Class
[findbugs] java.lang.ArrayIndexOutOfBoundsException
[findbugs] Jul 27, 2017 8:17:35 PM edu.umd.cs.findbugs.TextUIBugReporter reportAnalysisError
[findbugs] SEVERE: Couldn't get class info for java/util/concurrent/ConcurrentMap
[findbugs] java.lang.ArrayIndexOutOfBoundsException: 28526
----解決:這個是因為工程是用java 1.8 編譯的,選擇findbugs 3.0 以上版本
2、 如果你的工程要求jdk 1.7 那麼請把ant 降低到 1.9 我用1.9.3 沒有問題,否則會出現 jdk版本錯誤,錯誤碼:52
相關推薦
Devops學習實踐(五)jenkins 與 ant 、findbugs 配合使用
之前jenkins裡面介紹用findbugs主要是採用maven方式,但是很多情況下,工程專案採用的ant進行編譯和打包的,通過jenkins ant findbugs結合的方式也是可以
Devops學習實踐(二) Jenkins安裝、配置、任務構建
隨著工作的要求,devops作為今年工作的一個重點,由此也引發了自己對於devops相關的工具和技術的學習和實踐。基於上述背景,這個系列將逐步的介紹SVN的安裝和配置、jenkins安裝和配置、rev
機器學習實踐(五)—sklearn之特徵降維
一、特徵降維概述 為什麼要對特徵進行降維處理 如果特徵本身存在問題或者特徵之間相關性較強,對於演算法學習預測會影響較大 什麼是降維 降維是指在某些限定條件下,降低隨機變數(特徵)個數,得到一組“不
Vue:學習筆記(五)-Class 與 Style 繫結
提醒 原帖完整收藏於IT老兵驛站,並會不斷更新。 前言 本篇繼續對Vue的【Class 與 Style 繫結】篇進行總結學習。 正文 操作元素的 class 列表和內聯樣式是資料繫結的一個常見需求。因為它們都是屬性,所以我們可以用 v-bind 處理它們:只需
JavaWeb學習筆記 (五) HttpServletResquest與HttpServletResponse
一.HttpServletRequest物件 1. HttpServletRequest物件 這個物件代表了客戶端的請求,當客戶端請求伺服器時,客戶端所有的請求資訊都封裝在了這個物件中,通過這個物件中的一些方法可以獲取到客戶端請求的一些資訊。 獲取請求頭中的
學習筆記(五)SQLite與ContentProvider
SQLite SQLite是Android系統內建的輕量級關係資料庫,它具有運算速度快,佔用資源少等優點,通常只需要幾百K的記憶體就足夠了,因此特別適合在移動裝置上使用。SQLite不僅支援標準的SQL語法,還遵循資料庫的ACID事務,所以用過關係型資料庫的同
laravel學習筆記(五)控制器與路由
頁面 ret nat 復雜 引用 其中 namespace fun 判斷 當業務邏輯比較復雜時,可以通過控制器+路由來實現頁面加載,舉例如下: 1、新建控制器 在app/Http/Controllers文件夾下新增控制器,如新增app/Http/Controllers/
Devops學習實踐(一) SVN安裝和配置
隨著工作的要求,devops作為今年工作的一個重點,由此也引發了自己對於devops相關的工具和技術的學習和實踐。基於上述背景,這個系列將逐步的介紹SVN的安裝和配置、jenkins安
ES6學習筆記(五)--函式與物件
函式 引數的預設值 基本用法 function log(x, y = 'World') { console.log(x, y); } log('Hello') // Hello World log('Hello', 'China') //
Linux視訊學習筆記(五)--許可權管理命令、檔案搜尋命令、幫助命令、使用者管理命令、壓縮解壓命令
宣告:本系列文章是博主根據 “兄弟連新版Linux視訊教程”做的筆記和視訊截圖,只為學習和教學使用,不適用任何商業用途。 PS:文章基於Linux版本CentOS6.9,如果對Linux感興趣,建議去看《細說Linux》,沈超老師和李明老師的教學風格我很喜歡:) 4.
從零開始學習html(五)與瀏覽者交互,表單標簽——下
定位 開始 系統 isp ctr 程序 顯示 text 輸入 六、使用下拉列表框進行多選 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-T
《Qt5 開發與實例(第三版)》學習筆記(五)
液晶 lag bool child gles 操作 啟動 ring home 1 //2.5 控件 2 //2.51 按鈕組(Buttons) 3 /* 4 Radio Button //單選按鈕 5 Check Box//復選框 6 Dialog
Nodejs學習筆記(五)—Express安裝入門與模版引擎ejs
num routes 項目目錄 其中 bubuko 執行 ctrl+ ica 開發經驗 前言 前面也學習了一些Node.js的基本入門知道,現在開始進入Web開發的部分; Node.js提供了http模塊,這個模塊中提供了一些底層接口,可以直接使用,但是直接開發網站
d3.js學習筆記 (五) (打包圖與冒泡圖)
打包圖僅表示資料間包含關係,打包圖如下示例: var width = 500; var height = 500; //================設定打包圖佈局======================= var pack = d3.layout.p
機器學習實踐(八)—sklearn之交叉驗證與引數調優
一、交叉驗證與引數調優 交叉驗證(cross validation) 交叉驗證:將拿到的訓練資料,分為訓練集、驗證集和測試集。 訓練集:訓練集+驗證集 測試集:測試集
吳恩達新書-機器學習學習筆記-(五)與人類表現水平對比
1.為何與人類表現水平進行對比 許多機器學習系統的設計目的是想要自動化處理一些人類可以處理得很好的事情。可舉的例子有影象識別、語音識別以及垃圾郵件分類等等。學習演算法進步如此之快,有許多類似任務的處理已經超過了人類的表現水平。 有很多理由表明在處理人類擅長的任務時,構建一
應用統計學與R語言實現學習筆記(五)——引數估計
Chapter 5 Estimation 本篇是第五章,內容是引數估計。 1.引數估計的一般問題 正如前面介紹的,統計學的兩大分支,分別是描述統計和推斷統計。所以今天來談談推斷統計的第一大問題——引數估計。當然一般叫統計推斷的會更多些,二者是一樣
影象目標檢測與跟蹤學習筆記(五)
作者跟蹤的實現過程中,作者定義了兩個correlation filter,一個濾波器(translation filter)專門用於確定新的目標所處的位置,另一個濾波器(scale filter)專門用於尺度評估。在translation filter方面,作者的方法與MOSSE的方法是一樣的
Nodejs學習筆記(五)--- Express安裝入門與模版引擎ejs
目錄 前言 前面也學習了一些Node.js的基本入門知道,現在開始進入Web開發的部分; Node.js提供了http模組,這個模組中提供了一些底層介面,可以直接使用,但是直接開發網站那還是太累了,所以http模組也不單講了,可以去看官方API:http://nodejs.org/api
TensorFlow:實戰Google深度學習框架(五)影象識別與卷積神經網路
第6章 影象識別與卷積神經網路 本章通過利用CNN實現影象識別的應用來說明如何使用TensorFlow實現卷積神經網路 6.1 影象識別問題簡介及經典資料集 1. Cifar Cifar-10:10種不同種類的60000張影象,畫素大小為3