小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Jenkins配置分布式構(gòu)建環(huán)境

 點點閱 2025-01-04 發(fā)布于江蘇

1、概述

在《Jenkins部署架構(gòu)概述 》這篇博文中對Jenkins部署架構(gòu)進行了講解。對于分布式架構(gòu),Jenkins包括固態(tài)Agent和動態(tài)Agent兩種方案。

  • 固定Agent(常用于虛擬機):Agent容器一直運行,任務(wù)構(gòu)建完成后不會銷毀,創(chuàng)建完成后將一直占用集群資源,配置過程較簡單。
  • 動態(tài)Agent(常用于K8s):構(gòu)建任務(wù)時動態(tài)創(chuàng)建Agent容器,并在任務(wù)構(gòu)建完成后銷毀容器,可實現(xiàn)資源動態(tài)分配,資源利用率高,但是配置過程較為復(fù)雜。

本文將對Jenkins添加固定Agent進行詳細講解。

2、Jenkins添加固定Agent

(1)登錄Jenkins Dashboard,單擊左側(cè)“Manage Jenkins”,選擇“Security→代理配置頁面(TCP port for JNLP)”,如圖所示。我們可以選擇開放固定端口或者隨機開放Jenkins Master的一個端口來提供JNLP服務(wù)。

新安裝完的Jenkins Master節(jié)點上面的代理默認(rèn)是禁用狀態(tài), 如果這里不開啟代理,后面添加JNLP連接模式的固定節(jié)點時會報以下報錯。

1
2
3
4
java.io.IOException: http://10.20.31.153:8080/jenkins/tcpSlaveAgentListener/ is invalid: 404 null
    at org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:222)
    at hudson.remoting.Engine.innerRun(Engine.java:809)
    at hudson.remoting.Engine.run(Engine.java:563)

(2)單擊左側(cè)“Manage Jenkins”,選擇“Nodes”。

(3)單擊頁面右上角的“New Node”,輸入節(jié)點名稱為node203(該名稱可自定義),類型選擇固定節(jié)點。

 配置以下節(jié)點信息:

  • Name:agent名稱。
  • Number of executors(并發(fā)構(gòu)建的最大數(shù)目):執(zhí)行器,是真正執(zhí)行項目的單元,默認(rèn)值是1。一個執(zhí)行器可以被理解為一個單獨的進程(事實上是線程)。在一個節(jié)點上可以運行多個執(zhí)行器。
  • Remote root directory(遠程工作目錄): agent機器上的工作目錄,使用絕對路徑。
  • Labels:agent的標(biāo)簽。當(dāng)agent數(shù)量變多時,如何知道哪些agent支持JDK 8、哪些agent支持Node.js環(huán)境呢?我們可以通過給agent打標(biāo)簽(有時也稱為tag)來確定。同一個agent可以擁有多個標(biāo)簽。
  • Usage:agent的使用策略,有兩種:
    • Use this node as much as possible,盡可能使用此agent。
    • Only build jobs with label expressions matching this node,只有當(dāng)構(gòu)建任務(wù)符合本agent的標(biāo)簽時,才使用此agent。
  • Launch method(啟動方式),有兩種
    • Launch agent by connecting it to the controller,通過Java Web啟動代理(JNLP,跨平臺,但是必須提前在固定節(jié)點安裝配置JRE環(huán)境,最常用方式)。
    • Launch agent via SSH,Jenkins Master通過SSH連接到固定Agent(此方式比較簡單,但是不能跨平臺,用的較少)。

其余參數(shù)可保持默認(rèn),無需填寫,并單擊“保存”。

 (4)在“節(jié)點列表”中單擊新增的節(jié)點名稱,可看到Agent狀態(tài)未連接,并提供了節(jié)點連接Jenkins的方式。

(5)在固定Agent節(jié)點上,打開命令終端,運行Master提示的命令。

注意 1:Agent節(jié)點需要提前安裝好與Jenkins版本匹配的JRE,不然報has been compiled by a more recent version of the Java Runtime(class file version 5x.0)錯誤。其中5x:51=Jdk7、52=Jdk8、53=Jdk9、54=Jdk10、55=Jdk11,以此延續(xù)。

注意 2:SSH和JNLP 2種啟動方式區(qū)別,主要核心區(qū)別是:

  • SSH是Master主動連接Slave,當(dāng)你在Master配好了一臺機器的賬密,那么Master就可以通過賬密SSH到這臺機器執(zhí)行命令,所以SSH是Master主動連接Slave
  • JNLP是Slave主動連接Master,Slave接收并執(zhí)行Master傳遞的Job,然后將結(jié)果反饋給Master。

 (6)在Jenkins Master“節(jié)點列表”中單擊新增的節(jié)點名稱,可看到Agent狀態(tài)已連接,下面就可以使用固定節(jié)點構(gòu)建流水線任務(wù)了。

3、使用固定Agent執(zhí)行流水線任務(wù)

(1)新建個流水線,Pipeline如下,代理節(jié)點根據(jù)標(biāo)簽接收構(gòu)建任務(wù)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
pipeline {
  agent {
    node {
      label 'node203'
    }
  }
  stages {
    stage('test node203') {
      steps {
        echo '使用node203執(zhí)行流水線'
        sh 'sleep 1h'
      }
    }
  }
} 

(2)運行流水線,再次查看node203節(jié)點狀態(tài),可以看到代理節(jié)點正在執(zhí)行流水線任務(wù)。

 注意 1:上面示例只是個Hello World,如果流水線里面需要執(zhí)行mvn命令,需要在固定節(jié)點安裝配置指定版本的mvn;如果流水線需要執(zhí)行npm命令,需要在固定節(jié)點安裝配置指定版本的nodejs.....。

4、Jenkins使用JNLP啟動Agent原理詳解

4.1 概述

Java網(wǎng)絡(luò)啟動協(xié)議(JNLP)是一種允許客戶端啟動托管在遠程Web服務(wù)器上的應(yīng)用程序的協(xié)議,用于在Java應(yīng)用程序之間建立安全、高效的通信。

JNLP只是技術(shù)方式,其核心是:

  1. Slave節(jié)點主動運行一個Agent程序與Master建立連接,接收并執(zhí)行Master傳遞的Job,然后將結(jié)果反饋給Master。
  2. Master通過JNLP協(xié)議與從節(jié)點進行通信,將構(gòu)建任務(wù)分發(fā)到Slave節(jié)點執(zhí)行。

4.2 為什么使用 JNLP 協(xié)議

  • 自動化:JNLP 協(xié)議允許 Jenkins Master 和 Agent 之間的連接和配置過程自動化,而不需要手動干預(yù)。Agent 啟動時自動處理與 Master 的連接和認(rèn)證,簡化了配置過程。
  • 安全性:JNLP 協(xié)議中的認(rèn)證機制可以確保只有授權(quán)的 Agent 可以連接到 Jenkins Master,從而提高了系統(tǒng)的安全性。
  • 動態(tài)更新:JNLP 文件可以包含最新的配置信息,這使得 Agent 可以在啟動時動態(tài)地獲取和使用這些信息。

4.3 Master節(jié)點和Slave節(jié)點之間的通信過程

(1)從節(jié)點通過JNLP協(xié)議與主節(jié)點建立TCP/IP長連接,這個長連接的機制允許Jenkins Master和Agent之間保持持續(xù)的通信,以便實時地進行任務(wù)調(diào)度、執(zhí)行和狀態(tài)更新。

1
java -jar agent.jar -url http://10.20.31.153:8080/jenkins/ -secret 800b585576416c0041ed6ee9783f895118193e443309a2d557cfb319b057a8a9 -name node203 -workDir "/opt/jenkins"

以下是關(guān)于長連接的詳細信息:

  1. 長連接的建立: 
    • Agent 啟動:當(dāng) Jenkins Agent 啟動時,它會連接到 Jenkins Master 并建立一個持久的 TCP 連接。這種連接使用 JNLP 協(xié)議。
    • 通信保持:這個連接用于傳輸任務(wù)配置、執(zhí)行步驟、日志信息等。它確保 Jenkins Master 和 Agent 之間的通信可以實時進行。
  1. 通信過程:

    • 實時交互:在任務(wù)執(zhí)行過程中,Agent 會定期向 Jenkins Master 發(fā)送任務(wù)進度、構(gòu)建日志和其他狀態(tài)信息。Master 會接收這些更新,并在 Web 界面中顯示實時進展。
    • 指令發(fā)送:Jenkins Master 會通過這個長連接向 Agent 發(fā)送任務(wù)指令和配置更新。
  2. 連接的穩(wěn)定性:

    • TCP 連接:Jenkins 使用 TCP 連接來維持與 Agent 的長連接。TCP 協(xié)議提供了可靠的數(shù)據(jù)傳輸,確保數(shù)據(jù)包的順序和完整性。
    • 心跳機制:為了保持連接的活躍性,Jenkins Master 和 Agent 通常會使用心跳機制(即定期發(fā)送空閑的網(wǎng)絡(luò)包)來檢測連接是否仍然有效。如果連接中斷,Master 會嘗試重新連接,或者標(biāo)記 Agent 為離線狀態(tài)。

(2)主節(jié)點調(diào)度構(gòu)建任務(wù),從節(jié)點根據(jù)標(biāo)簽接收構(gòu)建任務(wù),并按照主節(jié)點的指示執(zhí)行構(gòu)建作業(yè),并將構(gòu)建結(jié)果和日志發(fā)送回主節(jié)點。

(3)主節(jié)點將構(gòu)建結(jié)果和日志發(fā)布到Jenkins界面上,供用戶查看和監(jiān)控。

5、總結(jié)

本文詳細講解了如何在Jenkins中添加固定Agent并使用固定節(jié)點運行流水線任務(wù),同時闡述了Jenkins JNLP連接方式的原理。通過本文,您可以更好地理解和優(yōu)化Jenkins的節(jié)點配置和任務(wù)管理。

參考:Jenkins 安裝 JNLP 節(jié)點

參考:jenkins發(fā)布多臺java jenkins并發(fā)構(gòu)建

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多