CI&CD落地實踐-Jenkins分布式環境搭建及多節點運行
前言
1.Jenkins架構原理回顧
在前面一篇《CI&CD落地實踐2-Jenkins環境搭建&常見使用技巧》中,我們介紹了Jenkins的架構原理:
Jenkins是一種典型的Master-Slave主從架構。該架構包括一個Master(主)節點和多個Slave(從)節點。Jenkins的Master-Slave架構提供了可擴展性和靈活性,允許用戶添加更多節點來提高Jenkins的處理能力,同時保持構建和管理過程的可靠性。
- Master節點:Jenkins的核心是Master節點,包含Jenkins的核心功能和管理界面,并與所有Slave節點通信,調度和分配作業。主要的作業配置信息,如構建工作流程、觸發器和構建器、節點和視圖信息,以及連接外部系統的應用程序都存儲在Jenkins Master節點中。
- Agent節點:也稱slave節點,是通過Jenkins Agent(代理)連接到Master節點的計算機,它們執行來自Master節點的作業并將結果返回給Master節點。
2.為什么要部署分布式環境?
在Jenkins的分布式環境中,有以下幾個好處:
- 增加伸縮性:Jenkins的分布式環境中可以添加多個節點,將負載分散到不同的節點上,從而增加伸縮性。如果對Jenkins的使用量有要求,可以先添加一些節點,然后在需要的時候再添加更多節點。
- 提高性能:在集中式環境中,Jenkins會變得擁擠,當多個任務同時運行時,會導致性能下降。在分布式環境中,任務可以在不同的節點上運行,因此可以大大提高性能。
- 支持多種操作系統:Jenkins分布式環境可以在多種操作系統上運行,如Windows,Linux等,在不同的操作系統上運行構建可以更好的測試、驗證和分發。
- 更好的可靠性:在一個節點發生故障時,其他節點可以繼續運行任務,從而保證每個任務都能成功運行,增加了整個系統的可靠性。
- 更好的安全性:在分布式環境中,不同的節點可以采用不同的方式進行認證和授權,從而大大提高了Jenkins的安全性。
總之,Jenkins分布式環境可以提供更好的性能、伸縮性、可靠性和安全性,使得整個系統更加高效、穩定和安全。
3.分布式環境建設計劃
其實驅使我搭建分布式環境倒不是因為伸縮性不足、性能低下等方面的原因,而是我在一次Jenkins配置Maven項目、編譯后端springboot項目時,老是報Maven依賴庫錯誤的問題,最終導致編譯不過,嘗試了很多方法都沒有解決。但該項目在我本地的IDEA中是可以正常編譯通過的,于是我想了一個曲線救國的方案,就是在另一臺Windows機器上,搭建一套和我本機一模一樣的環境,將我本機的Maven倉庫整體打包復制過去,然后再安裝一個Jenkins,作為從節點使用。
當前我只在一個單節點服務器上安裝了Jenkins,計劃在一臺Linux系統機器上安裝Jenkins作為從節點1,在另一臺Windows系統機器上安裝Jenkins作為從節點2。
節點 | 主機 | 系統 | 用途 |
Master 主節點 | 192.168.1.20 | CentOS 7 | 分配、調度任務 |
Slave 從節點1 | 192.168.1.122 | CentOS 7 | 編譯前端項目 |
Slave 從節點2 | 192.168.1.188 | Win 10 | 編譯后端項目 |
一、添加Linux從節點
1.從節點環境配置
① 從節點安裝Jenkins
所在服務器需要安裝Jenkins,版本最好與主節點Jenkins版本保持一致,安裝步驟參考前面的《Jenkins環境搭建&常見使用技巧》
② 從節點環境配置
需要安裝Git以及相關插件,如果是編譯前端項目,需要配置nodejs,如果是編譯后端項目,還需要安裝maven等。前端環境配置可以參考前面的一篇《Jenkins實現前端項目自動化構建》
2.添加從節點
① 創建從節點
入口:系統管理-節點管理-添加節點,填寫從節點名稱,選擇固定節點
② 填寫從節點信息
- Number of executors:執行器數量,支持的最大job并發數,一般配置建議不超過當前節點電腦的CPU數量
- 遠程工作目錄
- 標簽:做調度策略時會用到
- 用法:一般選擇第一個“Use this node as much as possible”(盡可能的使用這個節點)
- 啟動方式:通過Java Web啟動代理
注意最后“節點屬性”,可以勾選“工具位置”提前指定該機器中的如JDK等工具的路徑。
剛添加好后的從節點處于不可用狀態,還需要進行一堆的配置:
③ 主節點配置代理
主節點:系統管理-全局安全配置-代理,指定一個代理端口(注意:從節點服務器防火墻一定要開放此端口)
④ 從節點連接主節點
在管理節點點擊查看新增的從節點詳情,會給出從節點如何連接主節點的提示:
在從節點上執行:
# 下載agent.jar
curl -sO http://192.168.1.20:8080/jenkins/jnlpJars/agent.jar
# 連接主節點
java -jar agent.jar -jnlpUrl http://192.168.1.20:8080/jenkins/manage/computer/h122/jenkins-agent.jnlp -secret 5d40fefd1148aa3e1461eb53a7764f655c030a7859cfa648b2340ba019146a3d -workDir "/home/jenkins/workspace"
此時我的報錯了,提示42730端口不可用,也就是前面提到的從節點服務器防火墻一定要開放主節點中配置的代理端口
防火墻開通端口號
firewall-cmd --permanent --add-port 42730/tcp
firewall-cmd --reload
再次執行連接命令后,連接成功
但是這種啟動方式會一直處于前臺運行,此時終端窗口無法再進行其他操作。因此,可以給它創建一個啟動腳本,使其后臺運行。
⑤ 創建啟動腳本
腳本內容如下:
nohup java -jar agent.jar -jnlpUrl http://192.168.1.20:8080/jenkins/manage/computer/h122/jenkins-agent.jnlp -secret 5d40fefd1148aa3e1461eb53a7764f655c030a7859cfa648b2340ba019146a3d -workDir "/home/jenkins/workspace" 2>&1 >nohup.out &
運行腳本
chmod +x start_agent.sh
./start_agent.sh
3.測試構建項目
在前面一篇《Jenkins實現前端項目自動化構建》中,已經在主節點成功構建運行了前端項目,此時我們再次構建該項目,看看它會不會在從節點運行。
當我點擊構建時,該項目確實是通過我新建的從節點"h122"執行構建的
但出現了報錯"No such file or directory",提示項目路徑不存在:
項目構建報錯問題排查
- 項目的配置:
- 控制臺輸出日志:
- 原本在master節點上運行時生成的工作目錄路徑:
- 轉到slave從節點上運行時生成的工作目錄路徑:
經過一番排查,終于找到了原因:
- 此項目原本是在主節點運行,我在主節點配置這個任務時,項目的路徑是寫死的:/home/jenkins/workspace/開普勒-前端,在主節點運行時確實有這個路徑,也能夠正常運行;
- 但是我在配置從節點時設置的遠程工作目錄是:/home/jenkins/workspace,當從節點首次構建項目時,也會生成一個workspace目錄,并在這個workspace目錄下創建以項目名稱“開普勒-前端”為名字的工作目錄,最后疊加在一起,從節點上該項目真正的工作目錄就是 /home/jenkins/workspace/workspace/開普勒-前端。而此時從節點匹配不到原本的"/home/jenkins/workspace/開普勒-前端"這個目錄,所以運行失敗。
項目構建報錯問題解決
解決方式有兩種:
- 一種是修改從節點配置,將遠程工作目錄路徑去掉一層workspace目錄;
- 第二種是通過全局變量$WORKSPACE來聲明工作目錄;
全局變量
我用的是第二種,將構建步驟中原本的"cd /home/jenkins/workspace/開普勒-前端"改為"cd $WORKSPACE"
再次構建,構建成功!
企微群也收到了構建成功的消息通知:
二、添加Windows從節點
1.從節點環境配置
① 從節點安裝Jenkins
同樣是需要先在Windows電腦上提前安裝好Jenkins。
② 從節點環境配置
同樣需要安裝JDK、Git以及相關插件,如果是編譯前端項目,需要配置nodejs,如果是編譯后端項目,還需要安裝maven等。
2.添加從節點
① 創建從節點
入口:系統管理-節點管理-添加節點,填寫從節點名稱,選擇固定節點
② 填寫從節點信息
同樣選擇“通過Java Web啟動代理”
在管理節點點擊查看新增的從節點詳情,會給出從節點如何連接主節點的提示:
③ 從節點連接主節點
在從節點上執行:
curl -sO http://192.168.1.20:8080/jenkins/jnlpJars/agent.jar
java -jar agent.jar -jnlpUrl http://192.168.1.20:8080/jenkins/manage/computer/win188/jenkins-agent.jnlp -secret ed74e189c3cf7012fac65f0c9af7e091a1159d36ebbef8c581491fccff40a1b5 -workDir "C:\Users\chenjigang\.jenkins"
連接成功:
此時會在我們配置的自定義工作目錄下自動創建生成remoting內部數據目錄
創建完成,從節點win188處于在線狀態:
3.指定項目運行節點
配置Jenkins項目
比如我想為某個項目指定用這個從節點win188來運行,那么則可以在該項目配置-General中勾選“限制項目的運行節點”,并填寫標簽表達式,也就是前面我們填寫從節點時設置的標簽名稱“win188”
構建該項目,可以看到,已經通過win188這個從節點來運行:
報錯問題解決
但是在運行的時候報錯了,提示maven路徑不存在,原因是此項目原本是在主節點(Linux)上運行的,該臺機器上的maven目錄是/home/apache-maven-3.6.3,而換到了從節點(Windows)系統運行以后,maven路徑不一致。
需要在win188從節點配置中指定相關工具位置:
再次運行,構建成功:
小結
以上就是Jenkins分別添加Linux從節點、Windows從節點以及構建過程中出現報錯問題排查解決的全部過程。總體來說,不管Linux從節點還是Windows從節點,步驟基本一致。關鍵的是如何合理利用好這些節點,從而物盡其用,使其發揮出更大價值!