自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

CI&CD落地實(shí)踐-Jenkins分布式環(huán)境搭建及多節(jié)點(diǎn)運(yùn)行

系統(tǒng) 其他OS
是Jenkins分別添加Linux從節(jié)點(diǎn)、Windows從節(jié)點(diǎn)以及構(gòu)建過(guò)程中出現(xiàn)報(bào)錯(cuò)問(wèn)題排查解決的全部過(guò)程??傮w來(lái)說(shuō),不管Linux從節(jié)點(diǎn)還是Windows從節(jié)點(diǎn),步驟基本一致。

前言

1.Jenkins架構(gòu)原理回顧

在前面一篇《CI&CD落地實(shí)踐2-Jenkins環(huán)境搭建&常見(jiàn)使用技巧》中,我們介紹了Jenkins的架構(gòu)原理:

Jenkins是一種典型的Master-Slave主從架構(gòu)。該架構(gòu)包括一個(gè)Master(主)節(jié)點(diǎn)和多個(gè)Slave(從)節(jié)點(diǎn)。Jenkins的Master-Slave架構(gòu)提供了可擴(kuò)展性和靈活性,允許用戶添加更多節(jié)點(diǎn)來(lái)提高Jenkins的處理能力,同時(shí)保持構(gòu)建和管理過(guò)程的可靠性。

  • Master節(jié)點(diǎn):Jenkins的核心是Master節(jié)點(diǎn),包含Jenkins的核心功能和管理界面,并與所有Slave節(jié)點(diǎn)通信,調(diào)度和分配作業(yè)。主要的作業(yè)配置信息,如構(gòu)建工作流程、觸發(fā)器和構(gòu)建器、節(jié)點(diǎn)和視圖信息,以及連接外部系統(tǒng)的應(yīng)用程序都存儲(chǔ)在Jenkins Master節(jié)點(diǎn)中。
  • Agent節(jié)點(diǎn):也稱slave節(jié)點(diǎn),是通過(guò)Jenkins Agent(代理)連接到Master節(jié)點(diǎn)的計(jì)算機(jī),它們執(zhí)行來(lái)自Master節(jié)點(diǎn)的作業(yè)并將結(jié)果返回給Master節(jié)點(diǎn)。

2.為什么要部署分布式環(huán)境?

在Jenkins的分布式環(huán)境中,有以下幾個(gè)好處:

  • 增加伸縮性:Jenkins的分布式環(huán)境中可以添加多個(gè)節(jié)點(diǎn),將負(fù)載分散到不同的節(jié)點(diǎn)上,從而增加伸縮性。如果對(duì)Jenkins的使用量有要求,可以先添加一些節(jié)點(diǎn),然后在需要的時(shí)候再添加更多節(jié)點(diǎn)。
  • 提高性能:在集中式環(huán)境中,Jenkins會(huì)變得擁擠,當(dāng)多個(gè)任務(wù)同時(shí)運(yùn)行時(shí),會(huì)導(dǎo)致性能下降。在分布式環(huán)境中,任務(wù)可以在不同的節(jié)點(diǎn)上運(yùn)行,因此可以大大提高性能。
  • 支持多種操作系統(tǒng):Jenkins分布式環(huán)境可以在多種操作系統(tǒng)上運(yùn)行,如Windows,Linux等,在不同的操作系統(tǒng)上運(yùn)行構(gòu)建可以更好的測(cè)試、驗(yàn)證和分發(fā)。
  • 更好的可靠性:在一個(gè)節(jié)點(diǎn)發(fā)生故障時(shí),其他節(jié)點(diǎn)可以繼續(xù)運(yùn)行任務(wù),從而保證每個(gè)任務(wù)都能成功運(yùn)行,增加了整個(gè)系統(tǒng)的可靠性。
  • 更好的安全性:在分布式環(huán)境中,不同的節(jié)點(diǎn)可以采用不同的方式進(jìn)行認(rèn)證和授權(quán),從而大大提高了Jenkins的安全性。

總之,Jenkins分布式環(huán)境可以提供更好的性能、伸縮性、可靠性和安全性,使得整個(gè)系統(tǒng)更加高效、穩(wěn)定和安全。

3.分布式環(huán)境建設(shè)計(jì)劃

其實(shí)驅(qū)使我搭建分布式環(huán)境倒不是因?yàn)樯炜s性不足、性能低下等方面的原因,而是我在一次Jenkins配置Maven項(xiàng)目、編譯后端springboot項(xiàng)目時(shí),老是報(bào)Maven依賴庫(kù)錯(cuò)誤的問(wèn)題,最終導(dǎo)致編譯不過(guò),嘗試了很多方法都沒(méi)有解決。但該項(xiàng)目在我本地的IDEA中是可以正常編譯通過(guò)的,于是我想了一個(gè)曲線救國(guó)的方案,就是在另一臺(tái)Windows機(jī)器上,搭建一套和我本機(jī)一模一樣的環(huán)境,將我本機(jī)的Maven倉(cāng)庫(kù)整體打包復(fù)制過(guò)去,然后再安裝一個(gè)Jenkins,作為從節(jié)點(diǎn)使用。

當(dāng)前我只在一個(gè)單節(jié)點(diǎn)服務(wù)器上安裝了Jenkins,計(jì)劃在一臺(tái)Linux系統(tǒng)機(jī)器上安裝Jenkins作為從節(jié)點(diǎn)1,在另一臺(tái)Windows系統(tǒng)機(jī)器上安裝Jenkins作為從節(jié)點(diǎn)2。

節(jié)點(diǎn)

主機(jī)

系統(tǒng)

用途

Master 主節(jié)點(diǎn)

192.168.1.20

CentOS 7

分配、調(diào)度任務(wù)

Slave 從節(jié)點(diǎn)1

192.168.1.122

CentOS 7

編譯前端項(xiàng)目

Slave 從節(jié)點(diǎn)2

192.168.1.188

Win 10

編譯后端項(xiàng)目

一、添加Linux從節(jié)點(diǎn)

1.從節(jié)點(diǎn)環(huán)境配置

① 從節(jié)點(diǎn)安裝Jenkins

所在服務(wù)器需要安裝Jenkins,版本最好與主節(jié)點(diǎn)Jenkins版本保持一致,安裝步驟參考前面的《Jenkins環(huán)境搭建&常見(jiàn)使用技巧》

② 從節(jié)點(diǎn)環(huán)境配置

需要安裝Git以及相關(guān)插件,如果是編譯前端項(xiàng)目,需要配置nodejs,如果是編譯后端項(xiàng)目,還需要安裝maven等。前端環(huán)境配置可以參考前面的一篇《Jenkins實(shí)現(xiàn)前端項(xiàng)目自動(dòng)化構(gòu)建》

2.添加從節(jié)點(diǎn)

① 創(chuàng)建從節(jié)點(diǎn)

入口:系統(tǒng)管理-節(jié)點(diǎn)管理-添加節(jié)點(diǎn),填寫(xiě)從節(jié)點(diǎn)名稱,選擇固定節(jié)點(diǎn)

② 填寫(xiě)從節(jié)點(diǎn)信息

  • Number of executors:執(zhí)行器數(shù)量,支持的最大job并發(fā)數(shù),一般配置建議不超過(guò)當(dāng)前節(jié)點(diǎn)電腦的CPU數(shù)量
  • 遠(yuǎn)程工作目錄
  • 標(biāo)簽:做調(diào)度策略時(shí)會(huì)用到
  • 用法:一般選擇第一個(gè)“Use this node as much as possible”(盡可能的使用這個(gè)節(jié)點(diǎn))
  • 啟動(dòng)方式:通過(guò)Java Web啟動(dòng)代理

注意最后“節(jié)點(diǎn)屬性”,可以勾選“工具位置”提前指定該機(jī)器中的如JDK等工具的路徑。

剛添加好后的從節(jié)點(diǎn)處于不可用狀態(tài),還需要進(jìn)行一堆的配置:

③ 主節(jié)點(diǎn)配置代理

主節(jié)點(diǎn):系統(tǒng)管理-全局安全配置-代理,指定一個(gè)代理端口(注意:從節(jié)點(diǎn)服務(wù)器防火墻一定要開(kāi)放此端口)

④ 從節(jié)點(diǎn)連接主節(jié)點(diǎn)

在管理節(jié)點(diǎn)點(diǎn)擊查看新增的從節(jié)點(diǎn)詳情,會(huì)給出從節(jié)點(diǎn)如何連接主節(jié)點(diǎn)的提示:

在從節(jié)點(diǎn)上執(zhí)行:

# 下載agent.jar
curl -sO http://192.168.1.20:8080/jenkins/jnlpJars/agent.jar
# 連接主節(jié)點(diǎn)
java -jar agent.jar -jnlpUrl http://192.168.1.20:8080/jenkins/manage/computer/h122/jenkins-agent.jnlp -secret 5d40fefd1148aa3e1461eb53a7764f655c030a7859cfa648b2340ba019146a3d -workDir "/home/jenkins/workspace"

此時(shí)我的報(bào)錯(cuò)了,提示42730端口不可用,也就是前面提到的從節(jié)點(diǎn)服務(wù)器防火墻一定要開(kāi)放主節(jié)點(diǎn)中配置的代理端口

防火墻開(kāi)通端口號(hào)

firewall-cmd --permanent --add-port 42730/tcp
firewall-cmd --reload

再次執(zhí)行連接命令后,連接成功

但是這種啟動(dòng)方式會(huì)一直處于前臺(tái)運(yùn)行,此時(shí)終端窗口無(wú)法再進(jìn)行其他操作。因此,可以給它創(chuàng)建一個(gè)啟動(dòng)腳本,使其后臺(tái)運(yùn)行。

⑤ 創(chuàng)建啟動(dòng)腳本

腳本內(nèi)容如下:

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  &

運(yùn)行腳本

chmod +x start_agent.sh
./start_agent.sh

3.測(cè)試構(gòu)建項(xiàng)目

在前面一篇《Jenkins實(shí)現(xiàn)前端項(xiàng)目自動(dòng)化構(gòu)建》中,已經(jīng)在主節(jié)點(diǎn)成功構(gòu)建運(yùn)行了前端項(xiàng)目,此時(shí)我們?cè)俅螛?gòu)建該項(xiàng)目,看看它會(huì)不會(huì)在從節(jié)點(diǎn)運(yùn)行。

當(dāng)我點(diǎn)擊構(gòu)建時(shí),該項(xiàng)目確實(shí)是通過(guò)我新建的從節(jié)點(diǎn)"h122"執(zhí)行構(gòu)建的

但出現(xiàn)了報(bào)錯(cuò)"No such file or directory",提示項(xiàng)目路徑不存在:

項(xiàng)目構(gòu)建報(bào)錯(cuò)問(wèn)題排查

  • 項(xiàng)目的配置:

  • 控制臺(tái)輸出日志:

  • 原本在master節(jié)點(diǎn)上運(yùn)行時(shí)生成的工作目錄路徑:

  • 轉(zhuǎn)到slave從節(jié)點(diǎn)上運(yùn)行時(shí)生成的工作目錄路徑:

經(jīng)過(guò)一番排查,終于找到了原因:

  • 此項(xiàng)目原本是在主節(jié)點(diǎn)運(yùn)行,我在主節(jié)點(diǎn)配置這個(gè)任務(wù)時(shí),項(xiàng)目的路徑是寫(xiě)死的:/home/jenkins/workspace/開(kāi)普勒-前端,在主節(jié)點(diǎn)運(yùn)行時(shí)確實(shí)有這個(gè)路徑,也能夠正常運(yùn)行;
  • 但是我在配置從節(jié)點(diǎn)時(shí)設(shè)置的遠(yuǎn)程工作目錄是:/home/jenkins/workspace,當(dāng)從節(jié)點(diǎn)首次構(gòu)建項(xiàng)目時(shí),也會(huì)生成一個(gè)workspace目錄,并在這個(gè)workspace目錄下創(chuàng)建以項(xiàng)目名稱“開(kāi)普勒-前端”為名字的工作目錄,最后疊加在一起,從節(jié)點(diǎn)上該項(xiàng)目真正的工作目錄就是 /home/jenkins/workspace/workspace/開(kāi)普勒-前端。而此時(shí)從節(jié)點(diǎn)匹配不到原本的"/home/jenkins/workspace/開(kāi)普勒-前端"這個(gè)目錄,所以運(yùn)行失敗。

項(xiàng)目構(gòu)建報(bào)錯(cuò)問(wèn)題解決

解決方式有兩種:

  1. 一種是修改從節(jié)點(diǎn)配置,將遠(yuǎn)程工作目錄路徑去掉一層workspace目錄;
  2. 第二種是通過(guò)全局變量$WORKSPACE來(lái)聲明工作目錄;

全局變量

我用的是第二種,將構(gòu)建步驟中原本的"cd /home/jenkins/workspace/開(kāi)普勒-前端"改為"cd $WORKSPACE"

再次構(gòu)建,構(gòu)建成功!

企微群也收到了構(gòu)建成功的消息通知:

二、添加Windows從節(jié)點(diǎn)

1.從節(jié)點(diǎn)環(huán)境配置

① 從節(jié)點(diǎn)安裝Jenkins

同樣是需要先在Windows電腦上提前安裝好Jenkins。

② 從節(jié)點(diǎn)環(huán)境配置

同樣需要安裝JDK、Git以及相關(guān)插件,如果是編譯前端項(xiàng)目,需要配置nodejs,如果是編譯后端項(xiàng)目,還需要安裝maven等。

2.添加從節(jié)點(diǎn)

① 創(chuàng)建從節(jié)點(diǎn)

入口:系統(tǒng)管理-節(jié)點(diǎn)管理-添加節(jié)點(diǎn),填寫(xiě)從節(jié)點(diǎn)名稱,選擇固定節(jié)點(diǎn)

② 填寫(xiě)從節(jié)點(diǎn)信息

同樣選擇“通過(guò)Java Web啟動(dòng)代理”

在管理節(jié)點(diǎn)點(diǎn)擊查看新增的從節(jié)點(diǎn)詳情,會(huì)給出從節(jié)點(diǎn)如何連接主節(jié)點(diǎn)的提示:

③ 從節(jié)點(diǎn)連接主節(jié)點(diǎn)

在從節(jié)點(diǎn)上執(zhí)行:

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"

連接成功:

此時(shí)會(huì)在我們配置的自定義工作目錄下自動(dòng)創(chuàng)建生成remoting內(nèi)部數(shù)據(jù)目錄

創(chuàng)建完成,從節(jié)點(diǎn)win188處于在線狀態(tài):

3.指定項(xiàng)目運(yùn)行節(jié)點(diǎn)

配置Jenkins項(xiàng)目

比如我想為某個(gè)項(xiàng)目指定用這個(gè)從節(jié)點(diǎn)win188來(lái)運(yùn)行,那么則可以在該項(xiàng)目配置-General中勾選“限制項(xiàng)目的運(yùn)行節(jié)點(diǎn)”,并填寫(xiě)標(biāo)簽表達(dá)式,也就是前面我們填寫(xiě)從節(jié)點(diǎn)時(shí)設(shè)置的標(biāo)簽名稱“win188”

構(gòu)建該項(xiàng)目,可以看到,已經(jīng)通過(guò)win188這個(gè)從節(jié)點(diǎn)來(lái)運(yùn)行:

報(bào)錯(cuò)問(wèn)題解決

但是在運(yùn)行的時(shí)候報(bào)錯(cuò)了,提示maven路徑不存在,原因是此項(xiàng)目原本是在主節(jié)點(diǎn)(Linux)上運(yùn)行的,該臺(tái)機(jī)器上的maven目錄是/home/apache-maven-3.6.3,而換到了從節(jié)點(diǎn)(Windows)系統(tǒng)運(yùn)行以后,maven路徑不一致。

需要在win188從節(jié)點(diǎn)配置中指定相關(guān)工具位置:

再次運(yùn)行,構(gòu)建成功:

小結(jié)

以上就是Jenkins分別添加Linux從節(jié)點(diǎn)、Windows從節(jié)點(diǎn)以及構(gòu)建過(guò)程中出現(xiàn)報(bào)錯(cuò)問(wèn)題排查解決的全部過(guò)程??傮w來(lái)說(shuō),不管Linux從節(jié)點(diǎn)還是Windows從節(jié)點(diǎn),步驟基本一致。關(guān)鍵的是如何合理利用好這些節(jié)點(diǎn),從而物盡其用,使其發(fā)揮出更大價(jià)值!

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-04-26 11:29:58

Jenkins版本Java 11

2013-12-04 13:32:30

2020-10-21 14:10:28

工具測(cè)試開(kāi)發(fā)

2013-12-06 09:37:49

分布式系統(tǒng)Travis CI

2022-03-01 16:26:09

鏈路監(jiān)控日志監(jiān)控分布式系統(tǒng)

2013-12-20 09:43:13

分布式

2013-12-05 09:36:37

分布式系統(tǒng)

2022-09-01 07:23:53

云原生數(shù)據(jù)庫(kù)Aurora

2014-06-18 16:47:57

初志云存儲(chǔ)云計(jì)算

2017-02-28 09:48:30

2013-06-08 14:34:42

Hadoop 2.0

2023-02-28 07:01:11

分布式緩存平臺(tái)

2023-04-26 08:01:09

分布式編譯系統(tǒng)

2024-05-20 11:23:18

2017-08-10 10:17:32

Hadoop分布式搭建

2021-05-18 08:00:00

Kubernetes容器進(jìn)程

2015-09-23 14:32:30

NFV分布式數(shù)據(jù)環(huán)境

2022-12-15 15:38:33

智能

2021-10-30 19:30:23

分布式Celery隊(duì)列

2022-09-07 08:18:26

分布式灰度方案分支號(hào)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)