來源:
http://www.sohu.com/a/318426094_371153
https://www.cnblogs.com/my_captain/p/9301656.html
http://www.pianshen.com/article/3449275031/
一、Jenkins的Master/Slave機制
Jenkins采用Master/Slave架構。Master/Slave相當於Server和agent的概念,Master提供web接口讓用戶來管理Job和Slave,Job可以運行在Master本機或者被分配到Slave上運行。一個Master可以關聯多個Slave用來為不同的Job或相同的Job的不同配置來服務。
Jenkins的Master/Slave機制除了可以並發的執行構建任務,加速構建以外。還可以用於分布式自動化測試,當自動化測試代碼非常多或者是需要在多個瀏覽器上並行的時候,可以把測試代碼划分到不同節點上運行,從而加速自動化測試的執行。
Master:Jenkins服務器。主要是處理調度構建作業,把構建分發到Slave節點實際執行,監視Slave節點的狀態。當然,也並不是說Master節點不能跑任務。構建結果和構建產物最后還是傳回到Master節點,比如說在jenkins工作目錄下面的workspace內的內容,在Master節點照樣是有一份的。
Slave:執行機(奴隸機)。執行Master分配的任務,並返回任務的進度和結果。
Jenkins Master/Slave的搭建需要至少兩台機器,一台Master節點,一台Slave節點(實際生產中會有多個Slave節點)。Jenkins分布式環境搭建步驟如下:
(1)前提:Master和Slave都已經安裝JDK 1.8或更高版本
(2)Master節點上安裝和配置Jenkins
(3)Master節點上新增Slave節點配置,生成Master-Slave通訊文件SlaveAgent
(4)Slave節點上運行SlaveAgent,通過SlaveAgent實現和Master節點的通訊
(5)Master節點上管理Jenkins項目,指定Slave調度策略,實現Slave節點的任務分配和結果搜集來源。
二、為Jenkins配置Master節點
Master不需要主動去建立,安裝Jenkins、創建了Jenkins賬戶,在登錄到主界面時,這台電腦就已經默認為master。
選擇“Manage Jenkins”->“Manage Nodes and Clouds”,可以看到Master節點相關信息:
三、為Jenkins添加Slave Node
在Jenkins界面選擇“Manage Jenkins”->“Manage Nodes and Clouds”->“New Node
(1)配置Node Name
(2)配置Agent類型:選擇永久模式(Permanent Agent)。更多Agent種類請安裝類插件后可見。
(3)接下來配置Agent信息:
Name:Slave機器的名字
Description:描述 ,不重要 隨意填
of excutors:允許在這個節點上並發執行任務的數量,即同時可以下發多少個Job到Slave上執行,一般設置為 cpu 支持的線程數。[注:Master Node也可以通過此參數配置Master是否也執行構建任務、還是僅作為Jenkins調度節點]
Remote root directory:用來放工程的文件夾,jenkins master上設置的下載的代碼會放到這個工作目錄下。
Lables:標簽,用於實現后續Job調度策略,根據Jobs配置的Label選擇Salve Node
Usage:支持兩種模式“Use this Node as much as possible”、“Only build Jobs with Label expressiong matching this Node”。選擇“Only build Jobs with Label expressiong matching this Node”,
Launch method:這里以選擇JNLP連接方式為例,如下:(也可選擇Launch agent by connecting it to the master)
(1)對於老版本Jenkins,選擇為TCP port for JNLP agents jenkins
(2)對於新版本Jenkins,選擇jave web start
注意:使用JNLP方式,需要在Manage Jenkins->Configure Gloabl Security界面配置:勾選“隨機選取”、勾選“Java Web Start Ageng Protocol/4”(有的版本是“Inbound TCP Agent Protocol/4”)、Enable Agent配置為Enable
更多Launch Method種類請在Manage Jenkins->Manage Plugins->Available界面安裝(圖片)類插件后可見:
添加完畢后,在Jenkins主界面,可以看到新添加的Slave Node,但是紅叉表示此時的Slave並未與Master建立起聯系。節點的“of excutors”通道數可以在此界面上看到:
接下來進一步做Slave Node配置。
1、Slave Node節點為Windows系統
登錄Slave Node主機,瀏覽器中通過Jenkins master節點的URI登錄系統,在Manage Jenkins->Manage Nodes and Clouds頁面點擊剛新建的節點,進入如下界面:
方式一:點擊上圖中的 “Launch” 按鈕,下載 Slave-agent.jnlp 文件到本地,以管理員的權限在命令行執行 Slave-agent.jnlp,最終會彈出一個小窗口,提示Connect,表示Slave Node 和Master Node連接成功。
如果希望把 Slave-agent .jnlp安裝成 Windows Service,以后 Slave Node重新啟動就能自動連接 master。在彈出一個小窗口的 File 菜單中點擊 “Install as a service”,完成安裝后上面的小程序會自動關閉,一個命令為jenkinsagent的 Windows服務被創建。
方式二:采用命令行方式。下載agent.jar文件到本地,以管理員的權限在命令行執行截圖中的命令。(其中Localhost:8080替換為Jenkins的Master的URI)
如果希望本命令在Slave Node重啟時自動運行,可以把如上命令保存為bat文件,在Window系統下設置開始時執行此bat文件。
2、Slave Node節點為Linux系統
類同Windows系統的Slave Node節點。只是啟動命令方式有差異。
把agent.jar保存到/home/Jenkins,運行sudo java -jar agent.jar....,注意sudo采用管理員方式運行(否則提示Exception in thread "main" java.nio.file.AccessDeniedException:/opt/jenkins錯誤)。
四、創建任務,為任務指定Node調度策略
(1)Jenkins首頁,New View創建一個自己視圖。
(2)選擇剛創建的視圖,進入My View頁面,New Job創建一個任務。
(3)創建Job的頁面,“General”下勾選“Restric where this project can be run”,填寫Label Expression。
Jenkins通過節點的label標簽來執行Jobs的Slave Node,一個標簽可以關聯多台不同命名的slave機器。
五、Jenkins的Master和Slave通信方式
常用的Master和Slave節點連接的方式是ssh或JNLP。
(1)ssh:對於Slave Node是linux系統,最方便的就是通過ssh啟動jenkins節點,但這個的前提是Master和Slave之前能進行ssh連接。
(2)jnlp:jnlp連接有個好處就是不需Master和Slave之間能夠ssh連接,只需能ping即可。Slave Node是windows的話,這個方式十分實用,因為有時候一些權限或者防火牆的原因,導致Master和Slave不能夠ssh連接;還有一些未知的原因導致無法ssh到Slave Node。
如章節三所言,也可以安裝Jenkins Plugins,支持更廣泛的Slave Agent類型和連接。