在現代軟體開發流程中,持續整合與持續交付(CI/CD)至關重要。Jenkins 作為常用的 CI/CD 工具,其分散式構建能力能有效提升建置效率。本文將詳細介紹如何利用 JNLP 協定,將 Jenkins 代理節點連線至主節點,並進一步將應用程式佈署至 AWS EC2 例項。此方法能有效利用雲端資源,彈性調配建置環境,並簡化佈署流程。
組態Jenkins代理連線到主節點使用JNLP的步驟
步驟1:組態Jenkins主節點以接收JNLP代理連線請求
在主節點機器上,點選「管理Jenkins」選單,然後滾動頁面並點選「組態全域性安全性」選單。在「代理」部分,選擇「固定」單選按鈕作為「TCP埠用於入站代理」選項,並輸入7070作為埠號。您可以使用任何可用的埠號。在「代理控制器安全性」部分,勾選「啟用代理控制存取代理」核取方塊。點選「儲存」按鈕。
步驟2:設定Jenkins URL
點選「管理Jenkins」選單,然後點選「組態系統」選單。滾動頁面到「Jenkins位置」部分,輸入Jenkins URL。我的Jenkins主節點啟動在IP地址192.168.43.10上,因此我使用此地址。
步驟3:從代理(從機)建立新的節點條目
在從機上開啟Jenkins,使用Jenkins主節點URL。點選「管理Jenkins」➤「管理節點和雲」選單。點選左側的「新節點」選單項。輸入節點名稱,在「節點名稱」欄位中。我輸入了Node3。點選「確定」按鈕。
其他欄位和其值如下:
- 名稱:Node3
- 執行器數量:1
- 遠端根目錄:C:\JNLPNode
- 標籤:JNLPNode
- 使用方式:盡可能使用此節點
在「啟動方法」下拉選單中,保持「透過JNLP啟動代理」的選項。檢視圖17-2中的節點屬性部分。點選「儲存」按鈕。然後點選圖17-5中突出顯示的agent.jar連結下載agent.jar檔案。
下載和組態agent.jar檔案
下載agent.jar檔案後,將其儲存在您想要的位置。我將其儲存在D:\AgentJar目錄中。
選擇「從代理命令列執行」部分下的命令。我的命令如下:
java -jar D:\AgentJar\agent.jar -jnlpUrl http://192.168.43.10:8080/computer/node3/jenkins-agent.jnlp -secret 76f01ce9855280b9b743b9afc1ccef4af908675f5a6ed229efd8fb4909aa74b -workdir "C:\JNLPNode"
複製並修改agent.jar檔案路徑以符合您的路徑。執行修改後的命令以啟動代理。
內容解密:
以上步驟組態Jenkins代理連線到主節點使用JNLP。首先,組態Jenkins主節點以接收JNLP代理連線請求,然後設定Jenkins URL。在從機上建立新的節點條目,並下載和組態agent.jar檔案。最終,執行修改後的命令以啟動代理。
圖表翻譯:
以下是Mermaid圖表,用於視覺化展示組態Jenkins代理連線到主節點使用JNLP的步驟:
@startuml
:步驟1:組態Jenkins主節點; --> :步驟2:設定Jenkins URL;
:B; --> :步驟3:從代理建立新的節點條目;
:C; --> :下載和組態agent.jar檔案;
:D; --> :執行修改後的命令以啟動代理;
@enduml
此圖表展示了組態Jenkins代理連線到主節點使用JNLP的步驟流程。每個步驟都對應到上述內容中的具體步驟。
瞭解分散式構建和Jenkins的應用
在軟體開發中,分散式構建是一種將構建過程分散到多個節點或機器上的技術,以提高效率和可擴充套件性。這種方法可以讓開發人員同時在多個環境中進行構建、測試和佈署,從而加速軟體的交付。
Jenkins是一種流行的自動化伺服器,可以用於實作分散式構建。透過組態Jenkins master和slave節點,開發人員可以建立一個分散式構建環境,以提高構建效率和可靠性。
建立JNLP節點並組態Jenkins Job
要建立一個JNLP節點,需要組態Remote root Directory和secret引數。Remote root Directory是節點的根目錄,而secret引數是用於驗證節點身份的密碼。
建立一個Jenkins Job時,需要指定Label Expression欄位為節點名稱,以確保Job在指定節點上執行。例如,建立一個名為JNLPNodeJob的Job,並指定Label Expression欄位為Node3,則Job將在Node3節點上執行。
Jenkins與AWS的整合
現在,應用程式通常佈署在雲端機器上,而不是在內部機器上。瞭解雲端平臺如AWS(Amazon Web Services)和Azure對於DevOps專業人員來說至關重要。
本章介紹如何使用Jenkins佈署Web應用程式到AWS雲端上的EC2例項,並在該應用程式上執行Selenium測試。
瞭解EC2例項
EC2例項是Amazon Web Services中的一種虛擬伺服器。使用者可以根據CPU和記憶體需求建立例項,並按小時租用虛擬伺服器。例項的費用根據例項型別的不同而有所不同。使用者可以根據需求建立例項,並在不再需要時終止例項以節省成本。
圖表翻譯:
@startuml
:分散式構建; --> :提高效率;
:A; --> :提高可靠性;
:B; --> :加速軟體交付;
:C; --> :D;
:Jenkins; --> :組態master-slave;
:F; --> :建立JNLP節點;
:G; --> :組態Jenkins Job;
:H; --> :執行Job;
:I; --> :佈署Web應用程式;
:J; --> :執行Selenium測試;
@enduml
內容解密:
以上圖表展示了分散式構建的概念和優點,以及如何使用Jenkins組態master-slave架構和建立JNLP節點。同時,也展示瞭如何使用Jenkins佈署Web應用程式到AWS雲端上的EC2例項,並在該應用程式上執行Selenium測試。這些步驟對於DevOps專業人員來說是非常重要的,因為它們可以幫助開發人員提高效率和可靠性。
在 AWS 上建立 EC2 例項
在將 Jenkins 整合到 AWS 之前,您需要在 AWS 上建立一個 EC2 例項。以下步驟將引導您完成此過程。
步驟 1:註冊 AWS
- 點選「建立免費帳戶」按鈕,進入註冊頁面。
- 填寫所需的詳細資訊,然後點選「繼續」按鈕。
- 再次填寫所需的詳細資訊,然後點選「繼續」按鈕,直到完成註冊過程。
- 選擇「簡訊驗證」選項,輸入手機號碼,然後點選「繼續」按鈕。
- 收到驗證碼後,輸入驗證碼,然後點選「繼續」按鈕。
- 完成註冊過程後,點選「完成註冊」按鈕。
步驟 2:登入 AWS
- 點選「登入控制檯」按鈕。
- 輸入電子郵件地址和密碼,然後點選「下一步」按鈕。
- 輸入驗證碼,然後點選「提交」按鈕。
- 登入後,點選「所有服務」連結,然後點選「EC2」連結。
步驟 3:建立 EC2 例項
- 滑動到頁面底部,點選「啟動例項」按鈕。
- 輸入「Windows」並按下 Enter 鍵,選擇所需的 Windows 作業系統。
- 選擇適合您的例項型別(例如 t2.micro、t2.medium 等)。
- 點選「審核和啟動」按鈕。
- 點選「啟動」按鈕。
步驟 4:啟動 EC2 例項
- 選擇現有的金鑰對或建立新的金鑰對。
- 下載金鑰對檔案(例如 MyEC2Instance.pem)。
- 點選「啟動例項」按鈕。
- 滑動到頁面底部,點選「檢視例項」按鈕。
- 選擇例項,然後點選「連線」按鈕。
- 點選「RDP 客戶端」按鈕,然後點選「取得密碼」連結。
- 上傳私鑰檔案(例如 MyEC2Instance.pem),然後點選「解密密碼」按鈕。
- 複製密碼,然後點選「下載遠端桌面檔案」按鈕。
- 雙擊下載的遠端桌面檔案,然後點選「連線」按鈕。
- 貼上密碼,然後點選「確定」按鈕。
內容解密:
以上步驟將引導您完成在 AWS 上建立 EC2 例項的過程。請注意,在建立例項時,您需要選擇適合您的例項型別和組態。同時,請確保您已經下載了金鑰對檔案,並且已經啟動了例項。
圖表翻譯:
@startuml
:註冊 AWS; --> :登入 AWS;
:B; --> :建立 EC2 例項;
:C; --> :啟動 EC2 例項;
:D; --> :連線到 EC2 例項;
@enduml
此圖表展示了在 AWS 上建立 EC2 例項的步驟。從註冊 AWS 到連線到 EC2 例項,每一步驟都很重要。請確保您已經完成了所有步驟,才能成功地建立和啟動 EC2 例項。
從系統整合與佈署的視角來看,本文詳細闡述了組態 Jenkins 代理連線到主節點,並利用 JNLP 技術實作分散式構建的流程。透過逐步分解組態主節點、設定 Jenkins URL、建立節點條目,以及下載和組態 agent.jar 檔案等關鍵步驟,文章提供了一套清晰且可操作性強的實施。然而,文章僅關注 JNLP 的組態,未深入探討其他連線方式,例如 SSH,在特定安全或網路環境下的優劣比較。此外,對於 agent.jar 的版本相容性及可能出現的連線問題,也缺乏更進一步的說明。
考慮到 Jenkins 分散式構建的複雜性,除了基礎的 JNLP 組態外,更需關注系統的穩定性和容錯機制。例如,主節點的單點故障將導致整個構建系統癱瘓,因此建議採用高用性架構,例如組態備份主節點。同時,agent 節點的資源監控和動態擴充也是提升系統效率和彈性的關鍵。此外,文章提及 AWS EC2 的佈署,但並未深入探討 Jenkins 與 AWS 更廣泛的整合方案,例如利用 AWS CodeDeploy 或 Elastic Beanstalk 實作自動化佈署和持續交付。
展望未來,隨著容器化技術的普及,Jenkins 與 Kubernetes 的整合將成為主流趨勢。利用 Kubernetes 的彈性伸縮和資源排程能力,可以更有效地管理 Jenkins agent 節點,並進一步提升分散式構建的效率和靈活性。同時,Serverless Jenkins 的概念也逐漸興起,透過將 Jenkins 佈署在 Serverless 平臺上,可以進一步降低維運成本和提升資源利用率。
對於希望建構高效且穩定的 CI/CD 流程的團隊,建議深入研究 Jenkins 與雲端平臺的整合方案,並積極探索容器化和 Serverless 技術的應用,才能在快速變化的技術環境中保持競爭力。玄貓認為,僅掌握基本的 JNLP 組態遠遠不夠,持續學習和探索新的技術與最佳實踐才是 DevOps 工程師的必經之路。