Jenkins分布式構建


前兩篇文章VirtualBox+Vagrant搭建虛擬機基于Jenkins快速搭建CI,分別完成了:創建虛擬機和搭建CI,接下來在完成以上工作的基礎上,進一步完成分布式CI的搭建。分布式任務構建即就是一個master為中心,很多slave來進行具體的構建操作。在自動化測試過程中經常用到分布式構建,多臺執行機來進行任務的構建以及自動化腳本的運行操作。


Jenkins其實自帶分布式特性,是Master/Slave的模型。在Master上分配任務,然后在Slave或者Master上完成。這個特性帶來兩個好處:(1)能夠有效分擔主節點上的壓力,加快構建速度;(2)能夠指定特定的任務在特定的主機上進行。

使用場景

  1. 如果項目需要定期集成,同時每次集成都需要較長時間。如果都運行在master服務器上,會消耗過多資源,這時就需要在建立多臺設備,并配置作為slave機器來為master提供負載服務。
  2. 需要不同的環境集成。如一個項目,包含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根據需求自動連接或者離線

選擇啟動方式

四種啟動方式如下:

  1. Launch agent via Java Web Start 通過Java Web Start連接節點 (適用于所有支持Java程序的系統)
  2. Launch slave via execution of command on the Master 通過主節點的控制臺連接節點
  3. Launch slave agents via SSH 在Unix(包括Linux)機器上通過SSH通道連接節點 (適用于Unix和Linux)
  4. 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節點的遠程工作目錄:

  1. 點擊“Launch”,下載slave-agent.jnlp文件
  2. 點擊“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" 此時不會出現圖形化界面
slave啟動成功圖形化界面

關聯Job

關聯Job有多種方式,這里在Jenkinsfile中,采用如下方式

node('test_node'){
      stage('Checkout'){
           checkout scm
      }
}

node('master'){
      stage('Test'){
           echo 'Test'
      }
}

此時直接在Jenkins中構建項目,即可根據node后跟的label名稱在不同的node上進行構建。結果可以具體構建結果后的 Console Output中查看,Running on后跟不同節點的路徑。

參考文檔

Distributed builds

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容