Jenkins的Master-Slave分布式構建
什么是Master-Slave分布式構建
Jenkins 的Master-Slave分布式構建,就是通過將構建過程分配到從屬Slave節點上,從而減輕Master節點的壓力,而且可以同時構建多個,有點類似負載均衡的概念。
如何實現Master-Slave分布式構建
1)開啟代理程序的TCP端口
Manage Jenkins -> Configure Global Security
2)新建節點
Manage Jenkins—Manage Nodes—新建節點
有兩種在 Slave節點連接Master節點的方法
我們選擇第二種:
2)安裝和配置節點
下載agent.jar,並上傳到Slave節點,然后執行頁面提示的命令:
java -jar agent.jar -jnlpUrl http://192.168.66.101:8888/computer/slave1/slave- agent.jnlp -secret f2ecbb99e0c81331e8b7a7917a94d478f39cb9763fc6c66d9a9741c61f9ae6d6 -workDir "/root/jenkins"
刷新頁面
3)測試節點是否可用
自由風格和Maven風格的項目:
流水線風格的項目:
ode('slave1') { stage('check out') { checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '68f2087f-a034-4d39-a9ff-1f776dd3dfa8', url: 'git@192.168.66.100:itheima_group/tensquare_back_cluster.git']]]) } }
傳統Jenkins的Master-Slave方案的缺陷
- Master 節點發生單點故障時,整個流程都不可用了
- 每個 Slave節點的配置環境不一樣,來完成不同語言的編譯打包等操作,但是這些差異化的配置導致管理起來非常不方便,維護起來也是比較費勁
- 資源分配不均衡,有的 Slave節點要運行的job出現排隊等待,而有的Slave節點處於空閑狀態
- 資源浪費,每台 Slave節點可能是實體機或者VM,當Slave節點處於空閑狀態時,也不會完全釋放掉資源
以上種種問題,我們可以引入Kubernates來解決!
Kubernates簡介
Kubernetes (簡稱,K8S)是Google開源的容器集群管理系統,在Docker技術的基礎上,為容器化的
應用提供部署運行、資源調度、服務發現和動態伸縮等一系列完整功能,提高了大規模容器集群管理的便捷性。 其主要功能如下:
- 使用Docker對應用程序包裝(package)、實例化(instantiate)、運行(run)。
- 以集群的方式運行、管理跨機器的容器。以集群的方式運行、管理跨機器的容器。
- 解決 Docker跨機器容器之間的通訊問題。解決Docker跨機器容器之間的通訊問題。
- Kubernetes 的自我修復機制使得容器集群總是運行在用戶期望的狀態。
大致工作流程:手動 /自動構建 -> Jenkins 調度 K8S API ->動態生成 Jenkins Slave pod -> Slave pod
拉取 Git 代碼/編譯/打包鏡像 ->推送到鏡像倉庫 Harbor -> Slave 工作完成,Pod 自動銷毀 ->部署
到測試或生產 Kubernetes平台。(完全自動化,無需人工干預)
Kubernates+Docker+Jenkins持續集成方案好處
服務高可用 :當 Jenkins Master 出現故障時,Kubernetes 會自動創建一個新的 Jenkins Master容器,並且將 Volume 分配給新創建的容器,保證數據不丟失,從而達到集群服務高可用。
動態伸縮,合理使用資源 :每次運行 Job 時,會自動創建一個 Jenkins Slave,Job 完成后,Slave自動注銷並刪除容器,資源自動釋放,而且 Kubernetes 會根據每個資源的使用情況,動態分配
Slave 到空閑的節點上創建,降低出現因某節點資源利用率高,還排隊等待在該節點的情況。
擴展性好:當 Kubernetes 集群的資源嚴重不足而導致 Job 排隊等待時,可以很容易的添加一個Kubernetes Node 到集群中,從而實現擴展。