在上一篇blog 中我們介紹了如何創建我們第一個jenkins插件,在這一篇blog繼續介紹在開發我們的插件過程中需要注意的一些問題。
擴展點選擇
Jenkings插件是基於擴展點來實現的,比如基於Builder這個擴展點,那這個插件的功能就是一個構建插件,類似ant-builder(使用ant來執行構建腳本)。Jenkins插件的擴展點有很多,具體可以查詢這里。該網頁列出了Jenkins所有的擴展點,點擊每個擴展點下面Implementations,會列出該擴展點對應的實現類。找到實現類的源碼就可以知道具體怎么使用該擴展點了,大部分的代碼在github上都可以找到。在前面創建的HelloWorld插件是一個基於Builder擴展點的插件,可以在job 配置頁面的Build 中增加該插件,以后每次Job每次構建的時候就會去調用該插件了。
Action介紹
Action是插件用來在Job或Build頁面增加功能的一種主要方式,是Jenkins最常用的一個擴展點。從下圖中可以看出什么是Action,就是頁面左邊菜單欄的一個菜單項,還可以在右邊的主頁面顯示相應的功能。
每個繼承了Action這個擴展點的插件都要實現3個方法,方法如下:
1 2 3 4 5 6 7 |
|
第一個是菜單項圖片,第二個是菜單名稱,第三個是菜單鏈接。
Action分瞬時和持久2種,這里主要介紹的是瞬時的Action。瞬時的Action可以隨時廢棄,讓另外一個新的Action來取代,適合一些每次構建都要執行操作的插件,但不適合需要保存持久數據的插件。
在Jenkins官網的插件開發指南中,推薦使用Transient***ActionFactory系列的繼承點, 有TransientViewActionFactory,TransientProjectActionFactory,TransientBuildActionFactory等,使用該系列的繼承點,只需要簡單的覆寫父類的 createFor方法,就可以實現創建瞬時Action的目的,可以根據不同的需要創建Job,Build,View的Action。
更多內容可以參考這里。
Jelly頁面
Jenkins插件開發中涉及到頁面的開發,比如Job的配置頁面,相關插件需要加上相關的配置開關,配置參數時,就需要有一個配置頁面來做相應的顯示。插件開發中用到的頁面是Jelly頁面,在第一篇blog中介紹了IDEA中關於jelly的插件,使用該插件可以更加方便 Jelly頁面的編寫。
Jelly頁面的簡單例子就不介紹了,官網上都有,這里簡單介紹一下Jelly頁面相關的一些標簽。與JSTL類似,Jelly也有自己的一些標簽,如下:
1 2 3 4 5 6 7 8 9 |
|
比如想使用jelly:core標簽,就可以在頁面中直接使用 j:XX來調用標簽的相關功能,其他標簽同樣按照這個方式來使用。其中jelly:core是常用的功能,比如設置變量,循環,判斷等功能。jelly:layout是分層相關的標簽,/lib/hudson是jenkins相關的功能,比如設置Job頁面圖標,Build頁面圖標等。更多標簽相關的內容可以參考這里。
配置文件
Jenkins插件開發中還涉及到一類文件,就是配置文件。配置文件不僅可以在Jelly頁面中使用,而且可以在Java文件中使用,不過在Java文件中使用的話需要先將配置文件編譯成對應的Java文件。
如何在Jelly頁面中使用配置文件?首先要在Jelly頁面所在的文件夾中放置配置文件,比如 頁面在這里dir/myAction.jelly,那么頁面對應的配置文件就應該在dir/myAction.properties。注意,配置文件名字需要和頁面名字相同,這樣頁面才可以找到對應的配置文件。比如有個Jelly頁面如下:
1 2 3 4 |
|
其對應的配置文件內容如下:
1
|
|
這樣配置了以后,展示Jelly 頁面時就可以自動調用配置文件里面的內容了。
如何在Java文件中使用配置文件?一般插件所用的Java配置文件名稱都叫做Messages.properties,文件保存在resources目錄下。比如我們的插件包結構是jenkins.plugins.myplugin,那么Messages.properties文件就保存在 resources/jenkins/plugins/myplugin/目錄下。
如果Java 文件中想要使用配置文件里面的值,需要先執行mvn pacakge命令,執行之后,以上面的例子為例,在target目錄下會產生generated-sources/localizer/jenkins/plugins/myplugin/Messages.java這個Java文件,如果配置文件里面有這樣的一個配置項:
1
|
|
那么Messages.java里面就會產生這樣的2個方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
這樣在Java文件中就可以直接調用這2個方法了,一般是調用第一個方法。
多語言配置。配置文件的文件名如果不帶后綴就是內容是英語的配置文件,比如Messages.properties。如果想讓你的插件可以在不同的國家語言下都顯示正常的話,就需要將你的配置文件復制多份,在名字后面加上不同的后綴,然后內容換上相關語言的內容。
比如,以上面例子為例,中文的配置文件名稱就是Messages_zh_CN.properties,配置文件的頁面也要換上相應的中文ASCII編碼,這樣就可以在中文系統環境下顯示中文內容了。如何將中文轉ASCII碼?可以直接使用Java Home里面的native2ascii命令。
開發經驗
在開發Jenkins插件的過程中自己摸索了一些方法,在這里介紹一下,以免讓其他同學走彎路。
首先是去到Jenkins的官網WIKI。這里介紹了如何創建你的插件工程,插件擴展點,插件編碼和頁面如何編寫等,內容比較多,但你只需要關注你需要的內容就可以了。
光看Jenkins的WIKI是不夠的,有一些頁面和類的用法上面沒有直接給出,那腫么辦呢?很簡單:看源碼。在github上download下jenkins的源碼(這里),在IDE里面打開Jenkins工程,比如想要查看某個jelly頁面的用法,就可以在工程中搜索所有jelly頁面,看看源碼中的頁面是怎么寫的,我們再拿過來改一下就可以了。類和擴展點不知道如何寫,也可以參照這個方法,通過源碼了解其他擴展點子類是如何寫的,然后再寫出自己的插件。
可能在jenkins的源碼中還是找不到擴展點的用法,那怎么辦呢?這個時候可能就需要去參考其他插件是如何寫的了,幸運的是,大部分插件的代碼現在都放在了github上,我們可以通過了解其他插件來寫出自己的插件。