火線教你如何開發Jenkins外掛
提到Jenkins,做測試工作的無論是小夥伴、大夥伴還是老司機都是比較熟悉的。網上大部分資料無非三種:Jenkins簡介、如何啟動Jenkins、如何安裝和使用Jenkins外掛。本文作為一個jenkins的進階:教你如何開發一個jenkins外掛。話不多說,讓我們直接切入正題。如本文題目所示,我會以火線為例,逐步講述一個jenkins外掛從無到有的整個過程。有些細心的小夥伴可能就疑惑了,jenkins我聽說過,“火線”又是個啥呢?由於本文主題是Jenkins外掛,對於火線的介紹請戳官網介紹。http://magic.360.cn/ 也許你會有意外收穫。
1、 工欲善其事,必先利其器。
巧婦還難為無米之炊呢,更何況我們這些程式猿呢?來,先把今天的“器”備齊了以便我們之後的衝鋒上陣,勇猛殺敵。
1)環境:Maven3、JDK6.0以上版本、Eclipse(選擇自己使用的IDE就可以)
2)新增Maven配置,請將如下配置內容新增到您的*\.m2\settings.xml配置檔案中。
<settings> <pluginGroups> <pluginGroup>org.jenkins-ci.tools</pluginGroup> </pluginGroups> <profiles> <!-- Give access to Jenkins plugins --> <profile> <id>jenkins</id> <activation> <activeByDefault>true</activeByDefault> </activation> <repositories> <repository> <id>repo.jenkins-ci.org</id> <url>https://repo.jenkins-ci.org/public/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>repo.jenkins-ci.org</id> <url>https://repo.jenkins-ci.org/public/</url> </pluginRepository> </pluginRepositories> </profile> </profiles> <mirrors> <mirror> <id>repo.jenkins-ci.org</id> <url>https://repo.jenkins-ci.org/public/</url> <mirrorOf>m.g.o-public</mirrorOf> </mirror> </mirrors> </settings> |
注意:以上各個環境的安裝步驟這裡不在絮叨,網上一搜,一大丟。如果你是第一次安裝使用Maven,編譯專案時需要下載很多依賴包,此時此刻,你可以去洗個頭,做個娘娘的髮型,美美噠再回來。
2、 萬事具備,只欠東風。
選擇一個你喜歡的開發外掛路徑。例如我的選擇在FireLine\jenkinsPlugin\
執行如下maven命令:
mvn -Uorg.jenkins-ci.tools:maven-hpi-plugin:create
執行中間需要輸入你的groupId和artifactId,如下圖:
完成後會在當前目錄下生成FireLinePlugin檔案目錄,此時此刻一個簡單的jenkins外掛模板就光榮誕生啦!!
3、 知其然知其所以然
以上準備工作完成後,即可動手操練起來,開發自己的jenkins外掛。
3.1 外掛專案目錄結構
src/main/java:存放專案的java原始碼;
src/main/resources:存放外掛的Jelly/Groovy檢視檔案;
src/main/webapp:存放外掛的靜態資原始檔,例如圖片、html檔案等。(自動生成外掛模板時無此目錄,如需新增靜態資源可自行建立)。
Jenkins使用了Jelly頁面渲染技術,jelly檔案以.jelly為字尾,在hudson中使用類全名的形式來查詢模型類對應的jelly頁面檔案,例如名為src/main/java/com/qihoo/fireline/FireLineBuilder.java的類,其對應的頁面檔案應該存在於src/main/resources/com/qihoo/fireline/FireLineBuilder/目錄下。如下圖:
resources檔案中的config.jelly檔案為job配置的檢視檔案,如圖:
global.jelly檔案為jenkins外掛的系統全域性配置檢視檔案,如圖:
3.2 生成eclipse專案
如果你的Eclipse開發環境未安裝Maven外掛,可以使用命令mvneclipse:eclipse 將maven專案轉化成eclipse專案直接匯入。若已安裝maven外掛,直接匯入maven專案。使用maven命令建立外掛會自動生成類檔案HelloWorldBuilder.java,此處我將類名更改成FireLineBuilder。
3.3 程式碼詳解
本模板中使用了jenkins的Builder作為擴充套件點,Jenkins中有多種不同擴充套件點,你也可以建立一個新的擴充套件點。詳情可參考:https://wiki.jenkins-ci.org/display/JENKINS/Extension+points
FireLineBuilder類中通過@DataBoundConstructor註釋來宣告建構函式,建構函式引數與config.jelly配置檔案中的欄位一一對應。
在Jenkins中,job每次執行編譯時,都會執行perform()方法,可在此方法內實現自己的外掛定義。方法中有四個引數:
build:描述任務的一次構建,通過該物件可獲取到當前構建的專案、工作空間、當前構建的執行結果等資訊。
workspace:當前構建的工作路徑。
launcher:用來啟動構建。
listener:監控構建過程的狀態。
注意:通過build物件可以獲取到jenkins的構建路徑,workspace獲取的是構建專案的工作路徑,此處注意區分。
在類FireLineBuilder中有個DescriptorImpl的內部實現類,其必須使用@extension來宣告。可通過DescriptorImpl來處理全域性系統配置,例如設定外掛在專案構建配置中顯示的名稱等。
public String getDisplayName(){
return"ExecuteFireLine";
}
顯示如圖:
通過DescriptorImpl類中FormValidationdoCheckName(@QueryParameter String value)方法可以對*.jelly配置中傳遞的引數進行基本的校驗。
注意:doCheck方法需要與配置中引數名稱一一對應。(此坑本人已跳,無奈臉)
3.4 debug 外掛
在專案目錄下執行如下命令:
>set MAVEN_OPTS=-Xdebug-Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n
>mvn hpi:run
在瀏覽器中訪問http://localhost:8080/Jenkins,即可檢視除錯外掛。
注意:如果修改resources和webapp中的內容,重新整理頁面即可看到最新修改,若修改了java原始檔,需要重新編譯,才能更新到最新的修改。
3.5 打包並部署自定義外掛
執行mvn命令mvn package。打包完成後,在根目錄下的target檔案目錄下會生成firelineplugin.hpi外掛安裝包。將firelineplugin.hpi安裝到jenkins中即可使用自定義外掛。
安裝jenkins自定義外掛有兩種方式:
Ø 終止Jenkins,將firelineplugin.hpi拷貝到$JENKINS_HOME/plugins目錄下並新建一個名為firelineplugin.hpi.pinned的空檔案。重啟Jenkins。
Ø 開啟jenkins頁面到“系統管理”à“管理外掛”à“高階”,上傳firelineplugin.hpi外掛重啟Jenkins。
菜鳥一枚,如果紕漏,還請斧正。