場景描述:
之前通過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的配置)
其它說明:
- centOS7機器 安裝jenkins
- slave機器 不需要安裝jenkins,在指定目錄下新建一個文件夾:
- 在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 節點管理