關於Jenkins集群 在Jenkins上同時執行多個任務時,單機性能可能達到瓶頸,使用Jenkins集群可以有效的解決此問題,讓多台機器同時處理這些任務可以將壓力分散,對單機版Jenkins的單點故障的隱患也有分散作用,今天就來實戰快速搭建Jenkins集群,Jenkins版本是2.190.2; ...
關於Jenkins集群
在Jenkins上同時執行多個任務時,單機性能可能達到瓶頸,使用Jenkins集群可以有效的解決此問題,讓多台機器同時處理這些任務可以將壓力分散,對單機版Jenkins的單點故障的隱患也有分散作用,今天就來實戰快速搭建Jenkins集群,Jenkins版本是2.190.2;
如何做到快速搭建集群
通過Docker可以省去大部分準備工作,您只需在Linux電腦上安裝docker,在輔以少量命令和操作即可完成集群搭建;
環境信息
本次實戰的環境一共要用三臺電腦,它們的設置都是一樣的,如下:
- 操作系統:CentOS Linux release 7.6.1810
- 防火牆關閉
- docker:1.13.1
三臺電腦的信息如下:
| 主機名 | IP地址 | 作用 |
|--|--|--|
| master | 192.168.133.131 | Jenkins集群的master節點,提供web服務 |
| agent1 | 192.168.133.132 | Jenkins集群的一號工作接節點,標簽是maven |
| agent2 | 192.168.133.133 | Jenkins集群的二號工作接節點,標簽是gradle |
建議agent2節點的記憶體大於4G,因為下一篇的實戰操作會用agent2編譯構建spring-framework,對記憶體的需求略大;
準備工作
- 後面的所有操作都是root賬號;
在每臺電腦上創建文件夾/usr/local/jenkins
創建Jenkins的master
- 登錄master機器,執行以下命令:
docker run \
-u root \
-idt \
--name master \
-p 8080:8080 \
-p 50000:50000 \
-v /usr/local/jenkins:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean:1.19.0
- 執行docker logs master,會在控制台顯示jenkins的登錄秘鑰,如下圖紅框所示:
- 瀏覽器輸入地址:http://192.168.133.131:8080 ,顯示Jenkins登錄頁面,如下圖所示,在紅框位置輸入剛纔複製的登錄秘鑰即可登錄:
- 選擇安裝推薦的插件:
- 靜候插件線上安裝完成:
接下來是創建管理員和使用實例url的操作,這裡就不多說了,您按實際情況自行斟酌;
至此,Jenkins的master已經搭建好,接下來將agent1和agent2作為工作節點加入集群;加入agent1
- 在Jenkins網頁上新增節點,操作如下圖,先進入節點管理頁面:
- 如下圖,新增一個節點,名為agent1:
- 接下來的節點詳情信息如下圖,註意四個紅框中的內容要和圖中保持一致:
- 保存成功後會顯示機器列表,如下圖,圖標上的紅叉表示機器不線上(此時agent1還沒有接入),點擊紅框:
- 如下圖所示,紅框中的命令就是agent1的啟動命令,執行該命令的機器會以agent1的身份加入集群:
- 註意上圖紅框中的agent.jar是個名為agent.jar的文件的下載鏈接,將此文件下載到agent1電腦的/usr/local/jenkins目錄下;
- ssh登錄agent1電腦,執行以下命令,即可將agent1加入Jenkins集群:
docker run \
-u root \
-idt \
--name agent \
-v /usr/local/jenkins:/usr/local/jenkins \
bolingcavalry/openjdk-with-sshpass:8u232 \
java -jar /usr/local/jenkins/agent.jar \
-jnlpUrl http://192.168.133.131:8080/computer/agent1/slave-agent.jnlp \
-secret 44c3e8d1531754b8655b53294bbde6dd99b3aaa91a250092d0d3425534ae1058 \
-workDir "/usr/local/jenkins"
上述命令中的後半部分,即java -jar ......就是前面圖片紅框中的agent1啟動命令,唯一要改變的是將agent.jar改成絕對路徑/usr/local/jenkins/agent.jar
- 上述命令的鏡像是bolingcavalry/openjdk-with-sshpass:8u232,其Dockerfile內容如下,可見非常簡單,就是OpenJDK鏡像裡面安裝了sshpass,這樣的容器可以在執行ssh命令時帶上遠程機器的密碼,而不用等待用戶輸入密碼,這樣便於shell腳本執行ssh命令:
FROM openjdk:8u232
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install --assume-yes sshpass
去Jenkins的網頁上查看節點列表,如下圖,可見agent1已經成功加入:
加入agent2
agent2加入集群的方式和agent1大部分是一樣的,只有以下兩點要註意:- 在Jenkins頁面上創建節點,名稱是agent2
- agent2的標簽是gradle,如下圖紅框所示:
此時agent2也加入成功:
至此,Jenkins集群搭建完成,這兩個節點帶有不同的標簽,下一篇文章《Jenkins集群下的pipeline實戰》中,我們在這個集群環境創建pipeline任務,並通過標簽被分配到不同的節點上,實現多節點並行執行;歡迎關註公眾號:程式員欣宸