code

2014年10月9日 星期四

在Jenkins上進行套件相依性測試(上) - Matrix Project Plugin

哇,最新的 JDK8u20 釋出了,不過我還在用OpenJDK6,我的專案可以直接昇級嗎?上周更新JDK後打包的版本,部份客戶反應出狀況了,但只是部份。為了不要影響全體客戶,決定先找出專案JDK版本的最低需求,為低於此版本的客戶更新JDK,但該怎麼做呢?

知道Matrix為什麼要翻成駭客任務了吧,因為太難了,似乎有個大家都能接受的答案就好

說實話,需要相依性測試的機會真的很少,絕多的情況,知道一個確定能執行的環境就夠了。若真的碰上了,但或許可以參考看看本篇提供的方式。本篇介紹的外掛Matrix Project Plugin,是Jenkins預設安裝的,可見這玩意肯定不簡單!

目標情境

利用Matrix Project建立多重測試專案,測試專案對JDK版本的相依性

Git: https://github.com/abola/co.gibar.example.git
Maven Goal: clean compile test

這兒建立了一支小程式,目前不知道他可以最少,或最高可以在那個Java版本下正常運行
https://github.com/abola/co.gibar.example/blob/master/src/main/java/co/gibar/examples/jenkins/matrix/JDK7OnlyScript.java

第一步:建立多重(Matrix)設定專案

平常我們作業大多都是使用Free-Style,而使用多重設定的使用情境,幾乎目的多是為了測試。而多重設定專案的內容與一般的差異,僅是多了『設定矩陣』的項目。增加軸線』是主要的設定,可以指定你要為專案建立多少不同的測試內容,預設可將不同的JDK版本加入,分別測試不同的JDK運行的結果是否正確。其餘的便都與一般專案無異。


JDK的清單會與你在Jenkins管理中安裝的JDK相同

第二步:多重設定專案的第一次建置

可以參考前面的Git / Maven Goal設定,先建立測試的內容,不過我們在Maven Goal先只進行clean compile。然後進行建置,我們來看看這過程與結果。
先 clean + compile 就好
每一個變數,都被拆成了不同的作業
JDK8 正確 ? http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8021591
我們看到了多重設定專案,會幫我們將矩陣中的設定,拆成子作業,最後將結果呈現在專案的頁面上。但這個範例是有點問題的,一開始使用了Java7 始有的語法,所以 Java7以前的版本當然無法使用。但還有一段,是在Java8後被修正的內容,Java8顯示正確問題在那?

第三步:納入單元測試

大家應該知道問題了,單單使用compile去測試編程式碼,只會掃的出語法上是否正確,通常稱為Compile Time;但測不出Runtime時的問題。測試Runtime問題,簡易的就是使用單元測試囉。
https://github.com/abola/co.gibar.example/blob/master/src/test/java/co/gibar/examples/jenkins/matrix/JDK7OnlyScriptTest.java
在Maven加入test
Runtime Error 要使用單元測試才有效果

所以重要之重要,想要真正知道專案的內容,是否可順利昇級或更換核心,足夠的單元測試與盡可能完整的測試覆蓋度,是較穩當的方式。同時也可以知道問題節點,及早反應,或許為了半年後的昇級,我們需要更換一些編碼上的習慣。


沒有留言:

張貼留言