使用Jenkins實現多平台並行集成
我們的后端C應用都是支持跨平台的,至少目前在Linux和Solaris上運行是沒有問題的,這樣一來我們在配置持續集成環境時就要考慮如何實現在代碼Commit后觸發多平台並行(同時)集成這個需求。
之前使用Buildbot時是通過為一個Scheduler配置多個Builder滿足這個需求的。但現在要換成Jenkins,我們如何來實現呢?昨天在折騰Jenkins時我把問題想簡單了,今天細致查看了一下Build Log后才發現之前的配置並未真正實現多平台並行集成。
最初的Jenkins配置大致是這樣的:我在Jenkins上添加了兩個節點(Slave Node),分別為x86-linux-ci-slave和x86-solaris-ci-slave,並且為這兩個節點設置了一個相同的標簽"foo-ci-slaves"。之后我創建了一個新Job – "foo-multiplatform-ci",選擇的是"構建一個自由風格的軟件項目(Build a free-style software project)"。為了使得該Job執行並行集成,我選擇了"Restrict where this project can be run",在"Label Expression"中填上了"foo-ci-slaves",其他配置這里就不贅述了。
按照我最初的理解,這樣配置后點擊"立即構建",兩個Slave Node上就會同時進行相關的集成。但Build Log告訴我事實並非我想象的那樣:Jenkins只是在一個Slave Node上執行了Job。那使用Jenkins如何來實現前面所說的多平台並行集成呢?查來查去,我發現原來是我在創建Job時選錯了配置,我應該選擇"構建一個多配置項目(Build multiconfiguration project)"。
與free-style project相比,multiconfiguration project的配置頁面中不見了"Restrict where this project can be run"配置選項,但卻多出了一個"Configuration Matrix"配置區域。在該區域中,我們可以選擇Slaves,在Node/Label中,我們可以看到當前Jenkins中配置的所有Label和Nodes。選擇一個Label是無法滿足我們的要求的,那樣Jenkins只會從Label中的若干個節點中選擇一個來執行集成。所以我選擇Nodes,將x86-linux-ci-slave和x86-solaris-ci-slave都選上,保存后我們就會在"foo-multiplatform-ci" Job的主頁面上看到兩個configuration: x86-linux-ci-slave和x86-solaris-ci-slave。點擊"立即構建",這兩個configuration對應的小球標志就會同時閃動,這說明"foo-multiplatform-ci"正在兩個Slave Node上並行運行呢,這才是我想要的結果。
支持多平台並行集成只是Multiconfiguration Project的一個用途之一,《Jenkins: The Definitive Guide》一書對此有更為細致的講解,你可以結合自定義Axis(坐標軸)以及parameterized Build實現更為復雜的構建需求。但目前我尚未遇到類似需求,所以這里也不敢亂說^_^。
© 2012, bigwhite. 版權所有.
參考資料:
http://tonybai.com/2012/02/15/intergating-on-multiple-platforms-simultaneously-using-jenkins/