Jenkins除了開源和免費,還有一個最吸引人的功能之一就是支持插件。
Jenkins不光有豐富的第三方插件,還可以自己動手編寫插件,和其他工具進行深度的集成,從而達到符合公司產(chǎn)品管理需求的一個定制化。
接下來我們會分享一系列關(guān)于Jenkins插件的使用和開發(fā)實踐經(jīng)驗,介紹一些經(jīng)典而又實用的第三方插件和公司內(nèi)部自己開發(fā)的插件,希望大家能在工作中根據(jù)項目的需求靈活地運用。
這次首先介紹的5個插件都是和Jenkins的job相關(guān)的,通過這些插件,可以按需連接各個job,使之協(xié)同工作。
那開始介紹前,讓我們來看看為什么需要這些插件來連接各個job呢。有人可能會說,為什么不能把產(chǎn)品的持續(xù)集成步驟統(tǒng)統(tǒng)建立在一個job上呢?
- 首先,Jenkins有一個限制,就是一個job的一次構(gòu)建的所有任務(wù)只能運行在一個節(jié)點上,那如果產(chǎn)品的編譯/部署/測試需要在不同平臺下(如編譯必須在Linux下,而執(zhí)行用例需要在Windows下)就必須建立不同的job
- 再次,如果只有一個job必然構(gòu)建時間會變長,也就是意味著產(chǎn)品的質(zhì)量反饋變慢(必須等到所有的任務(wù)才做完才能得到反饋)
- 還有,分開建job也是為了相互之間的“弱耦合”,之后相應(yīng)job的配置改動能盡量小的影響到其他job
- 最后,這樣可以使產(chǎn)品的持續(xù)集成流程更加清晰,及時發(fā)現(xiàn)產(chǎn)品相應(yīng)的短板
功能介紹:這是個比較簡單的插件,只是簡單地把某個job的構(gòu)建物拷貝到當前job的工作區(qū)。
簡單配置:
![]() 實踐應(yīng)用:
- 在產(chǎn)品被編譯/打包之后,需要在測試/聯(lián)調(diào)/演練多個環(huán)境下部署的時候,可以采用。一個job負責代碼的編譯和打包,并把構(gòu)建物(通常是WAR,JAR,TAR等)存檔下來,然后之后的多個job可以分別獲取相應(yīng)的構(gòu)建物用于產(chǎn)品的部署,保證了部署環(huán)境的一致性。
Tips:
+ 一定要保證上游job的構(gòu)建物是被存檔的
![]() + 默認情況下,拷貝過來的構(gòu)建物會以相同的目錄結(jié)構(gòu)存儲,如果只想保留文件而已,可以選擇“Flatten directories”,這樣所有的構(gòu)建物都會直接拷貝到“Target directory”,而不會保留目錄結(jié)構(gòu)
功能介紹:這是一個擴展型的插件,使各個job連接的時候可以傳遞一些job相關(guān)的信息
- 當前job的參數(shù)
- 自定義的參數(shù)
- SCM相關(guān)信息
- 運行的Node信息
簡單配置:
![]() 實踐應(yīng)用:
- 傳遞SVN Revision: 在代碼檢出階段會獲取相應(yīng)的SVN Revision信息,傳遞這個信息到下游的job中,在下游的各個job中直接檢出相對應(yīng)版本的代碼,保持各個構(gòu)建的版本一致性,防止由于頻繁的代碼提交導(dǎo)致各個job運行版本的不一致
- 保持各個job運行在同一個節(jié)點下: 如果有多套測試環(huán)境,可以通過這個勾選這個選項保持構(gòu)建環(huán)境的一致性
Tips:
+ 傳遞SVN Revision或是GIT Revision可以通過如下設(shè)置來完成 ![]() ![]() ![]() + 如果不需要傳遞任何參數(shù),一定要記得勾選“Trigger build without parameters”
![]() 功能介紹:這是一個用于生成特定視圖的插件,可以把job之間的關(guān)聯(lián)關(guān)系可視化,使產(chǎn)品的流程也隨之可視化。
簡單配置:
![]() 實踐應(yīng)用:
- 在配置產(chǎn)品的持續(xù)集成時,往往會有多個job協(xié)同工作,比如編譯/打包,靜態(tài)代碼檢查,單元測試,接口測試,UI測試,性能/壓力測試,而各個產(chǎn)品又相互有一定的依賴。通過在這個插件中設(shè)置初始job,就能很直觀地把job之間的關(guān)系整理出來,也能看到產(chǎn)品每次構(gòu)建的全局情況。在后期還可以從構(gòu)建信息中挑選合適的版本,增加發(fā)布環(huán)節(jié)。
Tips:
+ 通過設(shè)置選項“Show pipeline parameters in revision box”可以直觀地顯示job的build number,結(jié)合VersionNumberPlugin就可以顯示SVN revision
![]() + 通過設(shè)置選項“Show pipeline parameters in project headers”可以直觀地顯示job的某些參數(shù),如測試環(huán)境 ![]() 功能介紹:這是一個集成了ParameterizedTrigger和BuildPipeline的插件,但它是形成一個新的job,而不是一個視圖。
并且它不要求job之間本身就存在依賴關(guān)系。
這樣一來,建立job的時候可以保持相對的獨立性,而通過這個插件來組裝成產(chǎn)品所需要的持續(xù)集成環(huán)境。
簡單配置:
![]() 實踐應(yīng)用:
- 如果需要建立多條pipeline,并且在各條pipeline中有些job其實是可以共用的時候,可以考慮使用這個插件。例如產(chǎn)品有兩個分支develop和release, 需要分別檢出代碼(A1,A2),編譯(B),單元測試(C),對于develop分支只需進行簡單的回歸測試(D),而對release分支不僅僅是回歸測試(D),還必須有性能測試(E)。這種情況下,就會有A1-B-C-D和A2-B-C-D-E兩條pipeline,對于D來說,下游job是不確定的,這時就可以通過建立兩個Multijob來實現(xiàn)(當然,也可以通過PrameterizedTrigger通過設(shè)置和讀取變量來實現(xiàn),但是配置較為復(fù)雜)
Tips:
+ 在創(chuàng)建job時一定要選擇“MultiJob Project”,在“free-style project”下默認是不能選擇使用這個插件的
![]() + 對于某些job的結(jié)果不想影響下游job的執(zhí)行,例如靜態(tài)代碼檢查,可以通過以下設(shè)置來達到目的 ![]() 5. Join Plugin
功能介紹:這也是一個觸發(fā)job的插件,亮點在于它觸發(fā)job的條件是等待所有當前job的下游的job都完成才會發(fā)生。
當然,只有在當前job有兩個及以上的下游job時才有意義。
簡單舉個例子來說,A同時觸發(fā)B1和B2兩個job,然后配置這個插件又觸發(fā)C,這時C就會等B1和B2都完成之 后才會被執(zhí)行
簡單配置:
![]() 實踐應(yīng)用:
- 有些產(chǎn)品的部署會依賴于某些第三方的產(chǎn)品,可以同時部署自身的產(chǎn)品和第三方服務(wù),這時接下來的測試工作就需要等待所有這些部署都完成,自然這個插件就能有用武之地
- 為了加快構(gòu)建的速度,通??梢栽O(shè)置單元測試和冒煙測試同時進行,而隨后的功能測試又希望是在單元測試和冒煙測試都通過的情況下才進行,這種情況下Join插件就是必須的了
Tips:
+ 默認情況下,通過Join插件觸發(fā)的job是不能傳遞參數(shù)的,如果有需要,可以勾選“Trigger parameterized build on other project”,這樣其實就是把Join插件和ParameterizedTrigger插件集成起來了 ![]() 小結(jié):上面介紹的這些插件一般情況下不會都使用到,并且某些功能不止一個插件可以實現(xiàn),所以大家可以根據(jù)產(chǎn)品和項目的需求來靈活應(yīng)用,搭建出可靠、可維護、可視化強的持續(xù)集成環(huán)境 |
|