前兩篇文章VirtualBox+Vagrant搭建虛擬機、基于Jenkins快速搭建CI,分別完成了:創建虛擬機和搭建CI,接下來在完成以上工作的基礎上,進一步完成分布式CI的搭建。分布式任務構建即就是一個master為中心,很多slave來進行具體的構建操作。在自動化測試過程中經常用到分布式構建,多臺執行機來進行任務的構建以及自動化腳本的運行操作。
Jenkins其實自帶分布式特性,是Master/Slave的模型。在Master上分配任務,然后在Slave或者Master上完成。這個特性帶來兩個好處:(1)能夠有效分擔主節點上的壓力,加快構建速度;(2)能夠指定特定的任務在特定的主機上進行。
使用場景
- 如果項目需要定期集成,同時每次集成都需要較長時間。如果都運行在master服務器上,會消耗過多資源,這時就需要在建立多臺設備,并配置作為slave機器來為master提供負載服務。
- 需要不同的環境集成。如一個項目,包含web端,包含Android端,也包含iOS端,不同的測試需要的環境都不同,此時可以為每個環境配置一個slave進行測試。
一個slave是一臺為主的Jenkins機器建立一個負載build項目的電腦,一旦建立這個分布式任務是完全自動化的。每個slave運行一個單獨的程序,不需要再一個slave安裝全部的Jenkins。
新建節點
Jenkins -> 系統管理 -> 管理節點 -> 新建節點 -> 輸入節點名稱
- Dumb Slave:新建一個節點
- 復制現有節點:從已存在的節點中復制一份配置(如果存在節點才會顯示)
節點配置
-
描述
節點描述,支持中文 -
# of executors
最大同時構建數量(根據機器的性能定,單顆四核cpu建議不要超過5)【必須為數字】 -
遠程工作目錄
選擇slave上的工作目錄,即Job中checkout出的代碼所在的workspace目錄里 -
標簽
該節點的唯一標識,當在Job中要指定只在該節點進行構建與測試時,通過該唯一標識進行指定 -
啟動方法
有四種啟動方法,下面會具體講解 -
Availability
- Keep this slave on-line as much as possible:盡可能保持節點在線
- Take this slave on-line according to a schedule:根據時間表在線(類似于Linux的定時任務)
- Take this slave on-line when in demand and off-line when idle:讓Jenkins根據需求自動連接或者離線
選擇啟動方式
四種啟動方式如下:
- Launch agent via Java Web Start 通過Java Web Start連接節點 (適用于所有支持Java程序的系統)
- Launch slave via execution of command on the Master 通過主節點的控制臺連接節點
- Launch slave agents via SSH 在Unix(包括Linux)機器上通過SSH通道連接節點 (適用于Unix和Linux)
- Let Jenkins control this Windows slave as a Windows service 讓Jenkins節點添加到Windows服務中
關于四種啟動方式如何選擇,建議直接單擊Jenkins啟動方式一欄旁邊的問號圖標,會有每種啟動方式的具體解釋。具體,這里slave server 為macOS,可以使用Java Web Start ,也可以使用ssh,但由于項目限制,slave機器IP不固定,故選擇了Java Web Start。
Tips:默認第一次打開時,沒有 Launch agent via Java Web Start
方式,需要在系統配置中進行配置,Jenkins -> 系統管理 -> Configure Global Security -> Agent -> 指定端口,此時返回配置節點,則可以看到該項。
連接節點
到目前為止,節點配置工作完成,并已創建成功,新的節點機初始化將處于脫機狀態,接下來需要連接節點。介紹Launch slave agents via Java Web Start連接方式,Launch slave agents on Unix machines via SSH點擊保存后會自動連接。
創建完成后,如圖所示:
根據系統提示,需要完成下載工作,下載到slave節點的遠程工作目錄:
- 點擊“Launch”,下載slave-agent.jnlp文件
- 點擊“slave.jar”,下載slave.jar文件
下載完成后,就要啟動slave了,有兩種啟動方式,但本質都是將master中的slave-agetn.jnlp文件下載至slave所在的虛擬機,然后運行文件。兩種方式如下:
-
javaws slave-agent.jnlp
此時會啟動一個圖形化界面,如下圖所示。 -
java -jar [slave.jar](http://localhost:8080/jnlpJars/slave.jar) -jnlpUrl http://localhost:8080/computer/test_node/slave-agent.jnlp -secret 3010309baac6dc6b92848f32d1f5744bae179275b1f9f5f6e9deb17048ea282e -workDir "/Users/yxwang/VOS/jenkims-android-node"
此時不會出現圖形化界面
關聯Job
關聯Job有多種方式,這里在Jenkinsfile中,采用如下方式
node('test_node'){
stage('Checkout'){
checkout scm
}
}
node('master'){
stage('Test'){
echo 'Test'
}
}
此時直接在Jenkins中構建項目,即可根據node后跟的label名稱在不同的node上進行構建。結果可以具體構建結果后的 Console Output
中查看,Running on
后跟不同節點的路徑。