- DevOps:企業級CI/CD實戰
- 李澤陽編著
- 2635字
- 2024-12-31 21:40:40
1.2 Jenkins系統安裝
Jenkins是基于Java語言開發的持續集成系統,可以運行在任何安裝了Java運行環境的計算機上。本節,筆者將為讀者逐步演示Jenkins服務端(Server)和代理端(Agent)的安裝部署。
1.2.1 準備工作
Jenkins采用分布式架構,由服務端節點和代理端節點組成。服務端主要負責流水線作業的調度,代理端實際運行流水線作業。Jenkins架構圖如圖1-6所示。

圖1-6 Jenkins架構圖
提示:
為了保障Jenkins平臺的穩定性,筆者建議不要在生產環境的Jenkins服務端節點上運行流水線作業——當運行大量任務時,可能會使Jenkins節點崩潰,這會影響節點的性能。
1.操作系統
Jenkins是跨平臺(Windows/Linux/macOS)的,部署方式可以選擇通過本機系統包、Docker、Kubernetes等。筆者實驗環境是Linux CentOS 8操作系統。以下是系統和內核版本的信息。
[root@jenkins-service ~]#cat /etc/redhat-release CentOS Stream release 8 [root@jenkins-service ~]#uname -r 4.18.0-373.el8.x86_64
2.安裝JDK
Jenkins是使用Java語言開發的,運行時需要依賴JDK環境。自Jenkins LTS(長期支持版本)2.346.x之后,安裝部署時最低版本要求是JDK11(參考更新說明見https://www.jenkins.io/doc/upgrade-guide/2.346/)。
JDK11的安裝過程可以參考以下代碼。
#下載JDK11壓縮包 [root@jenkins-service ~]#wget https://github.com/adoptium/temurin10- binaries/releases/download/jdk-11.0.16.1%2B1/OpenJDK11U-jdk_x64_linux_ hotspot_11.0.16.1_1.tar.gz #解壓 [root@jenkins-service ~]#tar zxf OpenJDK11U-jdk_x64_linux_hotspot_ 11.0.16.1_1.tar.gz -C /usr/local [root@jenkins-service ~]# cd /usr/local/jdk-11.0.16.1+1/ [root@jenkins-service jdk-11.0.16.1+1]# ls bin conf include jmods legal lib man NOTICE release #設置環境變量 [root@jenkins-service ~]#vim /etc/profile export JAVA_HOME=/usr/local/jdk-11.0.16.1+1 export PATH=$JAVA_HOME/bin:$PATH [root@jenkins-service ~]#source /etc/profile #配置軟鏈接 [root@jenkins-service jdk-11.0.16.1+1]# ln -sf /usr/local/jdk-11.0.16.1+1/ bin/java /usr/bin/ #驗證版本信息 [root@jenkins-service jdk-11.0.16.1+1]# /usr/bin/java -version openjdk version "11.0.16.1" 2021-07-12 OpenJDK Runtime Environment Temurin-11.0.16.1+1 (build 11.0.16.1+1) OpenJDK 63-Bit Server VM Temurin-11.0.16.1+1 (build 11.0.16.1+1, mixed mode)
1.2.2 安裝Jenkins
在CentOS中需要下載系統rpm包來安裝Jenkins服務端。筆者本次安裝采用的是2.346.2-1.1版本,建議使用國內源下載對應的rpm包,如清華源(https://mirrors.tuna.tsinghua.edu.cn/jenkins/)。具體的安裝步驟及參考代碼如下。
1.下載系統包
下載系統包的命令如下。
[root@jenkins-service~]#wget https://mirrors.tuna.tsinghua.edu.cn/ jenkins/redhat-stable/jenkins-2.346.3-1.1.noarch.rpm
2.安裝系統包
安裝系統包的命令如下(見圖1-7)。
[root@jenkins-service ~]#rpm -ivh jenkins-2.346.3-1.1.noarch.rpm

圖1-7 安裝Jenkins服務
3.啟動服務
下面啟動Jenkins服務并檢查服務的狀態,如圖1-8所示。

圖1-8 啟動Jenkins服務
4.設置服務開機自啟
設置Jenkins服務開機自啟,如圖1-9所示。

圖1-9 設置Jenkins服務開機自啟
當我們完成上面的操作后,可以通過ps aux命令查看服務進程。如下面代碼所示,通過進程的啟動參數可以得知Jenkins默認的HTTP監聽端口是8080。
#查看服務進程 [root@jenkins-service ~]#ps aux | grep java | grep jenkins jenkins 3779 29.5 9.1 14278716 2984916 ? Ssl 21:12 0:25 /usr/bin/ java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot= /var/cache/jenkins/war --httpPort=8080
1.2.3 初始化
Jenkins服務端安裝好之后還有一個初始化的過程,通過瀏覽器訪問http://<service_ip>: 8080即可進入初始化頁面。
初始化的步驟如下。
1.解鎖系統
為了安全地安裝Jenkins,會將解鎖需要的密碼存儲到Jenkins啟動日志或者/var/lib/ jenkins/secrets/initialAdminPassword文件中。讀者可任選其中一種方式,將密碼粘貼到輸入框,單擊“繼續”按鈕,如圖1-10所示。

圖1-10 Jenkins解鎖
2.安裝插件
Jenkins的功能擴展都來自于插件。Jenkins插件資源豐富,為了集成一些工具,我們不得不安裝很多插件,但是在生產環境中,筆者不建議大家安裝太多無用的插件,因為插件增多會影響Jenkins的啟動速度,插件安裝方式如圖1-11所示。

圖1-11 Jenkins插件安裝方式
此處選擇“選擇插件來安裝”進入插件的選擇頁面,如圖1-12所示??梢钥吹絁enkins默認選擇了一些插件,這里我們單擊“無”取消默認選擇的插件,然后根據需求安裝本地化語言插件。

圖1-12 選擇Jenkins插件
單擊“安裝”按鈕即可進入插件安裝進度頁面,在該頁面可以看到已選擇插件的安裝進度和日志信息。
提示:
這個步驟很容易出現插件安裝停頓的問題,多數情況是因為網絡問題導致的,因此要保持網絡暢通。
3.創建用戶
插件安裝完成后,會自動跳轉到管理員用戶創建頁面,填寫用戶名、密碼等信息,單擊“保存并完成”按鈕,如圖1-13所示。

圖1-13 創建管理員用戶
4.配置實例
當前筆者的環境機器IP是192.168.1.200,端口號使用的是Jenkins默認設置的8080。如果讀者的端口或者IP地址發生了變化,記得更新這里的設置,如圖1-14所示。
5.完成初始化
如果進入如圖1-15所示的頁面,意味著安裝和初始化Jenkins服務端完成。

圖1-14 Jenkins實例配置

圖1-15 Jenkins安裝完成
第一次安裝部署完成后,如果Jenkins管理頁面顯示的是英文,重啟后會顯示中文,如圖1-16所示。

圖1-16 Jenkins首頁
1.2.4 安裝Agent節點
Jenkins的代理端主要用于運行Jenkins服務端所調度的流水線作業。它的部署方式與服務端一樣是跨平臺的。為了減少實驗環境的資源,筆者將Jenkins服務端和代理端部署在同一臺機器中。注意:實際生產環境要采用高性能的服務器進行獨立部署。
1.配置節點
單擊左側“系統管理”進入“管理Jenkins”頁面,在頁面中可以看到“節點管理”選項,如圖1-17所示。

圖1-17 Jenkins節點管理
進入節點管理頁面,可以看到已經在線的服務端master節點。單擊左側菜單中的“新建節點”,如圖1-18所示。

圖1-18 Jenkins新建節點
進入新建節點頁面后,填寫要創建的節點名稱和Type(節點類型)。因為筆者將Jenkins Agent節點部署到了一臺固定的機器上,所以Type選擇固定節點,如圖1-19所示。

圖1-19 填寫Jenkins節點信息
單擊Create按鈕創建節點并進入節點的詳細配置頁,如圖1-20所示。
各個配置項的說明如下。
名字:填寫節點的名稱。
描述:填寫節點的描述信息。
Number of executors:執行器的數量,默認每一個Jenkins作業會分配一個執行器。
遠程工作目錄:Agent節點的工作目錄。
標簽:可以對節點進行分組,便于流水線調度。
用法:哪些作業可以使用這些節點,選擇“只允許運行綁定到這臺機器的Job”或者“經常使用該節點”即可運行任意作業。

圖1-20 Jenkins節點詳細配置
在Jenkins的生產環境中,常用的啟動方式為SSH和JNLP。JNLP對應中文為“通過Java Web啟動代理”。這里筆者選擇“通過Java Web啟動代理”,如圖1-21所示。

圖1-21 Jenkins節點啟動方式
提示:
如果遇到“Either WebSocket mode is selected, or the TCP port for inbound agents must be enabled”錯誤提示,是因為在Jenkins新版本中,默認禁用了TCP端口。我們需要導航到“系統管理>管理Jenkins >安全>全局安全”配置開啟TCP端口,如圖1-22所示。

圖1-22 Jenkins Server與Agent通信端口配置
這里筆者默認配置的是50000端口,此端口作為后續Agent節點啟動時與Server節點通信使用。
填寫好上面的配置并保存。系統會自動進入節點頁面,可以看到剛剛增加的節點配置成功(此時節點添加成功但是還不能運行作業,需要啟動代理程序),如圖1-23所示。

圖1-23 Jenkins節點管理
2.啟動節點
以“Java Web”方式設置的代理節點,需要下載啟動程序。參考圖1-23單擊節點進入節點信息頁面,獲取agent.jar的下載鏈接。啟動節點的步驟如下。
1)創建Agent目錄
創建一個目錄用于存儲Jenkins Agent的安裝程序,命令如下。
#創建Agent目錄 [root@ jenkins-service ~]#mkdir jenkinsagent [root@ jenkins-service ~]#cd jenkinsagent/
2)下載Agent啟動程序
Agent啟動程序是一個Java語言開發的jar包。下載的命令如下。
#下載代理程序 [root@ jenkins-service jenkinsagent]#wget http://192.168.1.200:8080/ jnlpJars/agent.jar --2021-9-10 22:27:30-- http://192.168.1.200:8080/jnlpJars/agent.jar
3)啟動Agent程序
使用Java命令啟動Agent程序,如圖1-24所示。

圖1-24 啟動Jenkins Agent程序
提示:
根據筆者的經驗,此步驟出現問題的概率很高。大部分情況都是網絡問題導致的,例如檢查Agent節點與Jenkins Server節點的50000端口和8080端口的連通性是否正常。
當出現“Connected”關鍵字時查看節點管理頁面,可以看到該Agent已經連接成功。刷新節點頁面,如圖1-25所示。

圖1-25 Jenkins節點狀態
提示:
當前節點啟動成功,但是Jenkins Agent程序并未后臺運行。也就是說,終端關閉后程序就停止了,需要進一步優化。筆者習慣將啟動命令寫到腳本中,用nohup的方式啟動程序可以參考以下代碼。
#!/bin/bash nohup java -jar agent.jar -jnlpUrl http://192.168.1.200:8080/computer/ build01/jenkins-agent.jnlp -secret @secret-file -workDir "/opt/ jenkinsagent" &
至此,我們完成了Jenkins Agent節點的安裝,我們的基礎環境準備好了。