[Jenkins]集群 節點管理| |分布式打包


場景描述:

  之前通過jenkins搭建過ios自動化打包,使用1台mac mini作為打包機.現在每次打包時間是55分鍾左右,而且同時最多只能打包2個job,發版周,測試同事們經常會浪費很多時間在排隊打包上.

為了解決這個問題,決定做分布式打包,這樣同時有3台機器都可以打包,可以縮短排隊時間.

  經過一番調研,一開始是打算在不同的機器上都安裝jenkins,然后通過1個接口(自己寫)去檢測哪個機器上的jenkins是閑置可打包的,在搜索的過程中,發現jenkins可以做集群管理.再細細一看,完全能滿足我的需求.且比自己寫接口能更快實現功能.在這里記錄下我的配置過程,以及配置過程中遇到的問題及解決辦法.

我的需求:

  完成ios分布式打包

環境說明:

 共4台機器,我使用centOS7 上安裝的jenkins作為 master

  • master centOS7
  • slave1 mac 
  • slave2 mac 
  • slave3 mac
  • slave4 windows(本文中暫時沒有涉及windows_slave的配置) 

其它說明:

  1. centOS7機器 安裝jenkins
  2. slave機器 不需要安裝jenkins,在指定目錄下新建一個文件夾: 
  3. 在slave機器新建一個文件夾:agent_jenkins(自定義文件名,目錄),它將作為 job在slave機器的工作目錄 

搭建完成效果:

1.通過master_jenkins 連接salve機器成功 

2.通過master_jenkins 創建job,即可控制該 job使用slave環境運行構建

3.在master_jenkins構建隊列處,可以看到slave機器構建狀態

具體配置:

step1:創建節點

jenkins>>系統管理>>節點管理>>新建節點>>填寫節點名稱,勾選 [固定節點]單選鈕>>OK

注意:如果從來沒有配置過節點,不會出現 Copy Existing Node選項

 

點“OK”后,進入node配置

step2:配置節點:

前置條件:

在slave新建文件夾:agent_jenkins

我創建文件夾目錄位置是:/Users/xxx/agent_jenkins (你可以自己定義agent_jenkins在哪個目錄新建,可以與我的不一樣) 

如果沒有找到“通過java web啟動代理”,需要到 系統管理-全局安裝配置 打鈎“Enable Agent”。 

注意:在啟動方法這一項,這里選擇通過java Web的方式啟動,我試了其它2項,jenkins都拋了異常

可能是我的配置有問題吧,但是為了不浪費時間,當我試到[通過Java Web啟動代理]這個選項,不拋異常時,就果斷把之前的異常拋到腦后了

 

配置參數說明:

結點名稱:隨意填,不過最好能見名知義,我這里用的格式是:slave機型_ip

描述:隨意填

並發構建數:同時進行構建的最大數量,我這里設置為2

工作目錄:從節點上的jenkins工作目錄,即一開始我們創建的agent_jenkins所在的目錄

標簽:隨意填,我們將項目關聯到節點時,可以根據標簽來(也可以根據結點名稱)。即master_jenkins通過這個標簽來判斷job在哪個slave機器上構建

該項配置在 job >> configure>>General選項下

 

 

用法:因為我是用這台機器作IOS打包機,所以選擇“只允許運行綁定到這台機器的job”,這外選項相當於設置結點優先級。

啟動方式:通過java Web的方式啟動,由master連接到slave來執行任務

可用性:盡量保持在線

工具位置:不設置

環境變量:不設置

 

注意配置slave機器的環境變量,否則在執行job時就有可能會遇到找不到環境變量的問題

比如,我遇到了在執行ios打包時,找不到pod命令的問題

配置方法:

遠程連接你的slave機器,在終端中輸入echo $PATH,終端會打印出一串字符串,幾個路徑,復制該路徑,返回到Jenkins中,

勾選環境變量選項,填寫格式如下:

變量名:PATH

值:echo $PATH的結果

 

 

 step3:解決配置完成后,slave連接不成功的問題

點擊SAVE,這時候看到的界面如圖: 並沒有正確連接到slave52的機器

 點進去看一下報錯信息:

 

 從提示信息可以看出,jenkins提供了2種解決方案:

注意:這2個方法都要在salve機器上操作

方法1.通過瀏覽器下載 slave-agent.jnlp文件,並安裝

方法2.下載 agent.jar文件,並在命令行執行命令 

我操作過程中,這2個方法的區別是:

方法1我需要登錄slave機器,在瀏覽器中下載slave_agent.jnlp,通過可視化的方式,進行安裝;

方法2則是直接在本地下載jar文件,然后通過scp命令將jar文件復制到slave機器,最后通過java命令運行jar文件.在操作過程中,並不需要直接去登錄slave機器(我本地環境是ubuntu,slave是mac,本地可以通過ssh遠程連接mac)

方法1操作過程:

首先在slave_mac機器打開master_jenkins網址,jenkins>>節點管理>>打開slave_51節點>>點擊Launch,瀏覽器將會下載一個文件,文件名是:slave-agent.jnlp

 

我在slave_mac上安裝這個文件,此時可能會遇到一個錯誤:mac只允許安裝來自appstore的應用. 

解決辦法是,打開 系統偏好設置>>安全性與隱私>>通用>>在 允許從以下位置下載的應用選項欄中,選擇 App Store和被認可的開發者選項 

然后雙擊 slave-agent.jnlp文件,就可以安裝了,這時候會出現下面這個窗口

 

注意,不能將這個窗口關閉,否則master就會失去對該 slave的連接 

 

方法2操作過程:

我是在本地下載agent.jar文件的,然后將該文件復制至slave機器,命令如下:

wangju@wangju-HP-348-G4:~/Downloads$ scp /home/wangju/Downloads/agent.jar <username>@10.1.71.51:/Users/xxxx/agent_jar/ agent.jar 100%  771KB  10.8MB/s   00:00  

 ssh 連接slave機器,查看agent.jar文件已經復制到agent_jar文件夾下了

Mac mini:~ xxx$ cd agent_jar Mac mini:agent_jar xxx$ ls agent.jar

在slave機器命令行,執行命令

java -jar agent.jar -jnlpUrl http://10.2.1.92:8080/jenkins/computer/mac_10.1.71.51/slave-agent.jnlp -secret 42c65d0c9de7b44ef8516ea01fd1e75c402fd5fc1a525db02e0da1437d8cde46 -workDir "/Users/5i5j/agent_jenkins"

執行效果:

注意:在需要master連接slave機器的時間段,不能關閉命令行窗口,一旦關閉命令行窗口,master就會失去slave機器的連接

   

此時再master機器查看剛才新建的slave51機器,已經連接成功了(小電腦圖標旁邊沒有 X 號了)

 

驗證配置效果:

通過master-jenkins創建1個job,該job可以在slave機器上進行構建

操作步驟:

1.在master-jenkins,新建1個job

2.General>>Restrict where this project can be run(選擇job要運行的節點機器)

Label Expression 選擇我們剛剛新建的slave51機器 標簽:mac_mini_slave

 

 

 

 

3.構建job,可以看到job已經啟動了

   

 至此,就完成了jenkins集群的配置

 

 

參考文檔:

和我的需求場景一致:

搭建jenkins集群

配置步驟比較詳細

Jenkins 集群搭建 

jenkins節點管理參考以下2篇文檔:

 

jenkins 節點管理

 

Jenkins使用教程之管理節點


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM