為了減少構建隊列,你可以增加構建從機。主服務器將會通過輪詢或者綁定特定構建到特定從機的方式,將構建發送給從機。中培專家龔老師在這里進行了詳細介紹。
這樣做的原因一般是有些構建對托管的操作系統有一定的需求。
構建從機可以用來增加并行構建效率。它們也能用來在不同的操作系統上構建軟件。
例如,你可以有一個Linux的Jenkins主服務器和使用Windows構建工具的Windows從機來構建組件。為Apple Mac構建軟件,最好用一個Mac作為構建從機,尤其是Apple對于在虛擬服務器上部署操作系統有很古怪的規則。
本質上,Jenkins主機給從機發送命令,必須有一種途徑。這種途徑可以是經典的SSH方法,并且Jenkins提供內建的SSH功能。你也可以通過從機從主機上下載一個Java JNLP客戶端的方式來啟動Jenkins從機。如果構建從機不提供SSH服務,這種做法就很實用。
【跨平臺編譯的注意事項
盡管可以使用Windows構建從機,有些時候用Linux來構建Windows軟件要來得更容易些。諸如GCC那樣的C編譯器可以通過配置使用MinGW包來進行跨平臺編譯。
是否這樣做更容易取決于要構建的軟件。一個大系統通常由許多不同的部分組成,一些部分可能包含了不同平臺的本地代碼。
這兒有幾個例子:
本地的android組件。
本地為了性能而用C語言編寫的服務器組件。
本地為了性能而用C或C++語言編寫的客戶端組件。
本地代碼的多少有些取決于你所在的企業的性質。電信產品一般有許多的本地代碼,例如視頻編解碼器和硬件接口代碼。銀行系統可
能有用本地代碼編寫的高速消息系統。這樣做的一方面是件很重要的事:能夠在構建服務器上便捷地構建
所有使用中的代碼。否則,就會有一種不良傾向,那就是某些代碼只能在幾臺吃灰的機器上構建。這是我們需要避免的風險。
企業里的系統需要的究竟是什么,只有你自己才知道。
主機上的軟件
視構建的復雜性而定,你可能需要在構建服務器上安裝許多不同類型的構建工具。記住Jenkins主要是用來觸發構建的,它們并不自己構建。這個任務被委托給了例如Maven或Make這樣的構建系統。
以我的經驗來看,有一個基于Linux操作系統的主機是最方便的。大多數構建系統都可以在發行版庫里找到,直接從那里安裝是非常簡便的。
部署服務器上的應用服務器會持續更新,為了讓構建服務器也總是最新,你可以直接使用同一臺部署服務器來做構建。
觸發器
你可以設置一個定時器來觸發構建,或者輪詢代碼庫直到發生變更時才構建。
可以同時使用這兩種方法:
最常用的是輪詢Git庫,這樣每次提交都會觸發構建。可以觸發比持續構建更久也更加徹底的每夜構建。由于這些構建發生在假定無人工作的夜晚,慢一點也關系不大。 一個上游的構建可以觸發一個下游的構建,你還能讓一個任務里的成功構建觸發另一個任務。
任務鏈和構建流水線
能把任務串起來通常都是非常有用的。最簡單的方式是:當第一個任務成功完成時,會通過事件觸發第二個任務。幾個任務可以用這種方式在鏈中傳遞。這樣的一個構建鏈一般足以勝任大多數工作。有時構建步驟的可視化和細粒度控制任務鏈都是我們想要的。
在Jenkins術語里,鏈上的第一個構建被稱為上游構建,第二個被稱為下游構建。
雖然這種鏈式構建的方式一般夠用,但還是有可能需要更好地控制構建鏈。這樣的構建鏈通常被稱為流水線或工作流。
有許多為Jenkins創建更好流水線的插件,它們的數量表明了確實有改進這方面的大量需求。
多任務插件和工作流插件是其中的兩個例子。
工作流插件更加先進,它有一個優勢是可以用Groovy DSL來描述而不是在web界面上改來改去。
工作流插件是CloudBees主推的,它現在是Jenkins最主要的貢獻者。
想了解更多IT資訊,請訪問中培偉業官網:中培偉業