掌握Jenkins自動化部署:從代碼提交到自動上線的全流程揭秘
Jenkins自動化部署是現代軟件開發中不可或缺的一部分,它不僅簡化了代碼的發布過程,還為整個團隊帶來了無與倫比的效率和協作力。想象一下,開發者們可以專注于編寫高質量的代碼,而不是為繁瑣的手動部署所煩惱;測試人員能在每次提交代碼后立即看到測試結果,確保軟件質量;運營團隊不再需要熬夜加班來手動發布新版本,而是可以安心地看到系統自動完成一切。
Jenkins自動化部署的意義在于它賦予了開發團隊一種近乎魔法般的力量,將復雜、易出錯的手動操作變為簡單、高效的流水線流程。通過CI/CD(持續集成/持續部署),每一次代碼的提交都能觸發自動化的構建、測試和部署,確保每一個版本的上線都是經過嚴格測試和驗證的。這種無縫的工作流不僅提高了開發速度,還顯著降低了風險,讓軟件的發布更為可靠。
可以說,Jenkins自動化部署不僅是技術上的進步,更是一種開發理念的革新。它讓軟件開發變得更高效、更可靠、更具創新力。只要你體驗過Jenkins帶來的便利,你就再也不會回到手動部署的時代,因為那種“代碼一提交,系統自己搞定”的感覺,實在是太讓人欲罷不能了!
這就是Jenkins的力量,它不僅改變了開發的方式,也改變了我們對軟件開發的認知。如果你還沒嘗試過Jenkins,現在就是最好的時機,去體驗一下現代開發的魅力吧!
1.Jenkins工作流程
當你提交代碼后,Jenkins能夠自動觸發部署的背后,是一整套自動化構建和交付的流水線(Pipeline)在起作用。這里我將詳細介紹Jenkins的工作流程和內部原理,包括它如何監控代碼庫的變化、觸發構建、執行測試、打包以及最終部署到服務器的過程。
1.源代碼管理(SCM)輪詢或Webhooks觸發
?SCM輪詢:Jenkins會定期檢查(輪詢)配置的源代碼管理系統(如Git、SVN等)的倉庫,看是否有新的提交或代碼更改。如果檢測到變化,就會觸發構建任務。這種方法需要Jenkins定時訪問代碼庫,可能會有一定的延遲。
?Webhooks:相比之下,Webhooks是一種更為實時的觸發方式。開發者提交代碼后,源代碼管理系統會立即向Jenkins發送一個HTTP請求(Webhook),通知Jenkins有新提交。這使得Jenkins能夠更快響應代碼變化,立即啟動構建過程。
2.觸發構建任務
一旦Jenkins接收到代碼變更的通知,它會根據配置的Pipeline或Job來決定如何處理這次構建。Jenkins中的Pipeline是基于Groovy腳本的,它定義了從代碼提交到最終部署的整個流程。
3.流水線(Pipeline)階段
Pipeline分為多個階段,每個階段都可以獨立執行一組任務。這些階段通常包括:
?Checkout代碼:Jenkins從源代碼管理系統中將最新的代碼拉取到構建節點上。這一步通常使用插件(如Git插件)來與代碼庫交互。
?構建(Build):Jenkins根據配置的構建工具(如Maven、Gradle)對代碼進行編譯、打包。在這一步,代碼會被轉化為可執行的應用程序包(如JAR、WAR文件)或Docker鏡像。
?測試(Test):Jenkins會運行自動化測試腳本,包括單元測試、集成測試、功能測試等。這一步至關重要,因為它確保代碼在引入新變更后仍然是穩定和可靠的。
?代碼質量分析(Optional):Jenkins可以執行代碼質量檢查,使用工具如SonarQube來分析代碼的復雜度、安全性和可維護性,并生成報告。
?部署(Deploy):當所有前面的步驟都成功完成后,Jenkins會執行部署階段。根據配置,它可以將構建產物部署到不同的環境,如開發環境、測試環境或生產環境。這一步可以通過SSH、FTP、容器化部署(Docker、Kubernetes)或云服務API來實現。
4.工作節點(Agent)與主節點(Master)協作
Jenkins采用主從架構,其中主節點(Master)負責調度任務、管理工作隊列、監控節點狀態等。工作節點(Agent)實際執行構建任務,如代碼編譯、測試和部署等。
當Pipeline被觸發時,Jenkins主節點會分配一個或多個工作節點來執行具體任務。工作節點從主節點獲取任務后,開始執行相應的步驟,完成后將結果返回給主節點。
5.Jenkinsfile(流水線腳本)
Jenkinsfile是定義Pipeline的腳本文件,通常存儲在代碼庫中。這使得整個構建、測試和部署的流程代碼化,并與項目代碼一起版本控制。在Jenkinsfile中,你可以定義Pipeline的各個階段、條件邏輯、并行任務等。
6.通知與反饋
Jenkins在構建和部署過程中會生成實時的日志,并在任務完成后發送通知(如通過電子郵件、Slack)。如果構建失敗,Jenkins會立即通知相關人員,以便他們能夠快速響應和修復問題。
7.持續集成與持續交付/部署(CI/CD)
整個流程的核心思想是CI/CD,通過持續集成和交付,讓開發團隊能夠頻繁地提交代碼,并自動化測試、構建和部署,減少人為錯誤,提升軟件發布的效率和質量。
可以通過一張圖來直觀展示Jenkins在整個流程中扮演的角色,具體如下所示:該圖主要對比了人工部署與Jenkins自動化部署的過程。
在這里插入圖片描述
Jenkins的工作流程是通過SCM輪詢或Webhooks來實時監控代碼變化,使用Pipeline將構建、測試、打包、部署等步驟串聯起來,自動化地將應用程序從開發環境推送到生產環境。其主從架構、可配置的Pipeline、廣泛的插件支持,使得Jenkins成為了自動化部署的強大工具,讓整個軟件開發生命周期變得更加高效和可靠。
下面,讓我們一起踏入使用Jenkins自動部署Spring Boot項目的奇妙之旅!
2.搭建Jenkins
1.創建一個數據目錄
# 創建 jenkins 目錄 mkdir/data/jenkins_home/ # 修改目錄的所有者,以便于 Jenkins 容器能夠操作該目錄 chown-R 1000:1000 /data/jenkins_home/
2.拉取jenkins鏡像
docker pull jenkins/jenkins:lts
3.啟動jenkins容器
為了防止與 Spring Boot 默認使用的 8080 端口發生沖突,我選擇將 Jenkins 服務器的訪問端口配置為 8088。此外,在確保 Jenkins 可以從外部網絡訪問的同時,也需要在云服務器的安全組中配置防火墻規則來開放 8088 端口,這樣外部客戶端才能通過此端口訪問到 Jenkins 服務器。
docker run -d --name jenkins -p 8088:8080 -p 50000:50000 -v /data/jenkins_home:/var/jenkins_home jenkins/jenkins:lts
這樣的配置不僅能夠確保 Jenkins 服務與其他可能運行在同一服務器上的服務(如 Spring Boot 應用)之間不會產生端口沖突,還能通過精細控制防火墻規則來提高系統的安全性。
在云服務器的安全組設置中,你需要添加一條入站規則,允許來自特定 IP 地址或 IP 范圍的流量通過 8088 端口進入服務器。這樣既能保證 Jenkins 的可用性,也能限制不必要的網絡訪問,從而提升整體安全性。
4.訪問Jenkins
一旦Jenkins容器啟動,你可以通過訪問http://localhost:8088來訪問Jenkins界面。(注意:這里的localhost對應的你的云服務器IP地址!)
首次訪問時,系統會要求你輸入初始管理員密碼。
在這里插入圖片描述
5.獲取管理員密碼
可以直接去宿主機的 /data/jenkins_home/secrets/initialAdminPassword 位置查看初始化密碼,具體如下所示:(這里的/data/jenkins_home/是前面你自己設置的Jenkins工作目錄)。
在這里插入圖片描述
獲取管理員密碼之后就可以直接使用admin賬戶進行登錄,登錄之后的界面如下所示:
在這里插入圖片描述
3.安裝Maven
在Jenkins自動化部署中,Maven被安裝在服務器上是為了執行項目的構建任務,包括代碼編譯、依賴管理、測試執行和打包操作。通過Maven,Jenkins能夠自動化地將源代碼轉換為可部署的應用程序包(如JAR或WAR文件),確保項目按需構建并滿足所有依賴。
1.下載Maven
訪問Maven官方下載頁面,選擇需要的版本,復制下載鏈接。使用wget命令下載Maven。例如下載Maven 3.8.8版本:
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
2.解壓文件
將下載的文件解壓到你想要安裝的位置,例如/opt目錄:
sudotar -zxvf apache-maven-3.8.8-bin.tar.gz -C /opt
3.配置環境變量
為了方便使用Maven,需要配置環境變量。編輯/etc/profile文件:
sudovi /etc/profile在文件末尾添加以下內容:
exportM2_HOME=/opt/apache-maven-3.8.8 exportPATH=$M2_HOME/bin:$PATH
4.使環境變量生效
保存文件并退出編輯器,然后使環境變量生效:
source/etc/profile
5.驗證安裝
現在可以通過以下命令驗證Maven是否安裝成功:
mvn -version如果安裝成功,你將看到Maven的版本信息。
在這里插入圖片描述
4.安裝插件
在Jenkins啟動成功后,安裝以下三個插件能夠增強其功能,滿足特定的項目需求:
1.Gitee
?功能:Gitee插件允許Jenkins與Gitee代碼倉庫集成,支持從Gitee倉庫中拉取代碼、觸發構建任務。這對于使用Gitee進行源代碼管理的團隊非常有用,能簡化CI/CD流程。
?安裝:在“插件管理”界面,搜索“Gitee”插件并安裝。安裝后,可以在Jenkins的項目配置中添加Gitee倉庫的訪問信息,配置Webhook以便代碼提交時自動觸發構建。
2.Maven Integration
?功能:Maven Integration插件允許Jenkins與Maven無縫集成,使得Jenkins可以直接調用Maven進行項目的構建、測試和打包。這對于Java項目尤其重要,因為Maven能夠自動管理項目依賴、編譯代碼,并生成可部署的包(如JAR、WAR)。
?安裝:在Jenkins管理界面中,導航到“插件管理” -> “可選插件”,搜索“Maven Integration”并點擊“安裝”。
3.Publish Over SSH
?功能:Publish Over SSH插件允許Jenkins通過SSH將構建生成的文件(如JAR、WAR包)安全地傳輸到遠程服務器上。這對于部署過程至關重要,尤其是當需要將構建產物自動部署到生產或測試服務器時。
?安裝:同樣在“插件管理”界面,搜索“Publish Over SSH”并安裝。安裝后,你可以在“系統管理”中配置SSH服務器的連接信息。
通過安裝這些插件,Jenkins能夠更好地支持項目構建、打包、部署和代碼管理,大大提高自動化部署的效率和靈活性。
具體的安裝步驟如下所示:點擊左邊的系統管理,然后選擇右邊的插件管理,進行配置。
在這里插入圖片描述
之后在可選插件中,搜索 Maven Integration 和 Publish Over SSH 以及 Gitee 三個插件安裝即可:
在這里插入圖片描述
全部插件安裝完成之后,最好登錄服務器,重啟Jenkins容器以更新插件!具體命令如下:
docker restart jenkins
5.全局工具配置
在使用Jenkins進行自動化部署之前,進行一些全局工具的配置是必要的,這樣可以確保Jenkins能夠正確調用這些工具來完成構建、測試和部署任務。
在這里插入圖片描述
以下是Jenkins通常需要配置的全局工具:
1.JDK(Java Development Kit)
?為什么需要:Jenkins本身是基于Java的應用,并且許多構建工具(如Maven、Gradle)也依賴JDK。因此,配置JDK是必不可少的。
?配置方法:在Jenkins的“系統管理” -> “全局工具配置”中,找到JDK配置部分,點擊“添加JDK”,指定JDK的安裝路徑,或者選擇自動安裝。
2.Maven
?為什么需要:Maven是Java項目構建的標準工具,用于依賴管理、代碼編譯、測試和打包。通過配置Maven,Jenkins可以調用Maven進行項目構建。
?配置方法:在“全局工具配置”中找到Maven配置部分,點擊“添加Maven”,指定Maven的安裝路徑,或者選擇自動安裝。
在這里插入圖片描述
3.Git
?為什么需要:大多數項目都使用Git進行源代碼管理。通過配置Git,Jenkins可以從Git倉庫中拉取代碼并進行構建。
?配置方法:在“全局工具配置”中找到Git配置部分,添加Git安裝路徑,或者選擇自動安裝。確保Jenkins可以訪問正確版本的Git(由于 Jenkins 容器中已經存在 git 了,所以這里不需要額外安裝 git,默認即可)。
在這里插入圖片描述
4.Gradle(可選)
?為什么需要:對于使用Gradle構建的項目,配置Gradle工具是必要的。Gradle是另一個流行的構建工具,尤其在Android開發中被廣泛使用。
?配置方法:在“全局工具配置”中,找到Gradle配置部分,點擊“添加Gradle”,指定Gradle的安裝路徑或選擇自動安裝。
全局工具配置是確保Jenkins能夠順利執行構建、測試和部署任務的基礎。通過配置JDK、Maven、Git等工具,Jenkins可以與這些構建工具無縫集成,自動化地完成從代碼拉取到部署的整個流程。這些配置不僅提高了Jenkins的靈活性和適用性,還簡化了每個項目的具體配置工作。
6.系統配置
在Jenkins中進行系統配置時,Publish Over SSH和Gitee的配置是實現代碼部署和與代碼倉庫集成的關鍵步驟。以下是詳細的配置步驟介紹:
1.Publish Over SSH 配置
Publish Over SSH插件允許Jenkins通過SSH將構建生成的文件(如JAR、WAR包)安全地傳輸到遠程服務器上。以下是配置步驟:
步驟 1: 安裝 Publish Over SSH 插件
? 如果前面已經安裝請忽略步驟1
? 登錄Jenkins的管理界面。
? 在Jenkins首頁,點擊左側菜單中的“系統管理”或“Manage Jenkins”。
? 在管理頁面中,選擇“插件管理”或“Manage Plugins”。
? 在“可選插件”或“Available Plugins”選項卡中,搜索Publish Over SSH。
? 勾選插件并點擊“安裝”,等待插件安裝完成。
步驟 2: 配置 SSH 服務器
? 插件安裝完成后,返回“系統管理”頁面,選擇“系統配置”或“Configure System”。
? 向下滾動頁面,找到Publish Over SSH部分。
? 點擊“添加”按鈕,配置一個新的SSH服務器:
?Name: 為服務器配置一個易記的名稱。
?Hostname: 輸入目標服務器的IP地址或主機名。
?Username: 輸入用于登錄到目標服務器的用戶名。
?Remote Directory: 指定在遠程服務器上的默認目錄,Jenkins將把構建產物傳輸到此目錄。
?Use password authentication, or use a different key: 選擇是使用密碼認證,還是提供私鑰文件進行認證。
? 如果使用密鑰認證,配置私鑰文件路徑或直接粘貼私鑰內容。
? 點擊“測試配置”或“Test Configuration”按鈕,驗證Jenkins是否能夠成功連接到目標服務器。
在這里插入圖片描述
步驟 3: 保存配置
? 配置完成后,點擊頁面底部的“保存”或“應用”按鈕,以確保你的設置被保存。
2.Gitee 配置
通過配置Gitee,Jenkins能夠與Gitee代碼倉庫集成,實現代碼的自動拉取和構建。以下是配置步驟:
步驟 1: 安裝 Gitee 插件
? 同樣在Jenkins的插件管理中,搜索Gitee并安裝該插件。
步驟 2: 獲取 Gitee API Token
? 登錄到Gitee賬戶,點擊鏈接。
? 在“私人令牌”部分,點擊“生成新的令牌”。
? 根據需要選擇令牌的權限,例如“repo”(代碼倉庫相關操作)和“user_info”(用戶信息查看)。
? 生成令牌后,復制并保存。
在這里插入圖片描述
步驟 3: 添加 Gitee配置
? 在“系統配置”頁面,找到Gitee 配置。
? 配置你的Gitee倉庫信息:
?鏈接名: 輸入你的Gitee倉庫的URL(HTTPS)。
?Gitee域名URL: 輸入Gitee域名完整URL地址。
?證書令牌: 選擇Gitee API令牌。
在這里插入圖片描述
步驟 4: 添加憑據
? 在Gitee配置頁面 -> 點擊添加Jenkins。
? 在彈出的對話框中選擇“Gitee API令牌”,在“Gitee APIV5私人令牌”字段中粘貼你剛剛生成的API Token。
? 為該憑據提供一個名稱,并點擊“添加”保存。
在這里插入圖片描述
通過上述步驟,就已經在Jenkins中完成了Publish Over SSH和Gitee的配置。這些配置使得Jenkins能夠安全地將構建產物部署到遠程服務器,同時自動拉取和構建Gitee上的代碼,為CI/CD流程提供了基礎支持。
7.構建項目
在Jenkins中新建一個Maven項目的步驟如下:
1.登錄Jenkins控制臺
首先,訪問Jenkins的Web界面,使用你的管理員賬戶登錄。
2.新建項目
? 在Jenkins首頁,點擊左側菜單中的“新建任務”或“New Item”。
? 在彈出的窗口中,為項目輸入一個名稱,然后選擇“構建一個Maven項目”或“Maven Project”。
? 點擊“確定”進入項目配置頁面。
3.配置源碼管理(Source Code Management, SCM)
? 在項目配置頁面,找到“源碼管理”部分。
? 選擇你使用的版本控制系統(如Git),并輸入項目的代碼倉庫URL。
? 如果倉庫需要認證,配置相應的憑證(Credentials),如用戶名和密碼或SSH密鑰。
? 設置倉庫中觸發構建的分支代碼(*/release表示release分支有代碼提交則自動觸發構建)。
在這里插入圖片描述
4.構建觸發器
? 配置構建觸發器,這可以是輪詢SCM(Poll SCM)、Webhook觸發、定時構建等。
? 例如,如果你希望在每次代碼提交時觸發構建,可以選擇“GitHub hook trigger for GITScm polling”或“Poll SCM”,并設置合適的時間間隔。
在這里插入圖片描述
5.Gitee中配置WebHook
在Gitee中配置WebHook時,首先進入倉庫的“管理”頁面,選擇“Webhooks”并添加新WebHook。在請求URL中輸入Jenkins的WebHook地址(如),選擇觸發事件(如推送事件),然后保存配置。這樣,每當代碼提交時,Gitee將自動通知Jenkins觸發相應的構建任務。
在這里插入圖片描述
上圖中所需的URL將在設置Jenkins的Webhook觸發器時指定,這個URL用于接收外部觸發信號以啟動構建流程。由于 Jenkins 是要登錄之后才可以操作的,處于公網的 Jenkins 我們也不能降至設置為匿名訪問,所以這里我們將 Jenkins 的用戶名密碼放在請求地址中,最終地址類似這樣:http://username:password@IP:8088/xxxx。**而Jenkins系統中生成的URL是不包含用戶名和密碼的,需要你自己手動添加!**
此外,為了安全起見,Jenkins系統會自動生成一個密碼或密鑰,用于驗證Webhook請求的有效性,確保只有授權方能觸發構建任務。
在這里插入圖片描述 對應的URL和密碼輸入并新建WebHook即可,注意,因為Gitee中的bug,就算配置成功了,測試WebHook也會出現404錯誤。因此如果測試出現404錯誤不要著急,可以嘗試構建項目看看效果再來確定問題!
在這里插入圖片描述
6.構建設置
? 在“構建”部分,你需要輸入Maven構建的根POM文件的路徑,通常是pom.xml。
? 在“Goals and options”中,輸入你希望執行的Maven命令,如clean install或package,根據項目需求選擇合適的構建目標。
在這里插入圖片描述
7.構建后操作(Post Steps)
? 你可以在“構建后操作”部分添加一些后續步驟,如“發送郵件通知”或“部署到服務器”。
? 如果你使用Publish Over SSH插件,可以配置將構建產物上傳到遠程服務器的步驟。
在這里插入圖片描述
此外,這里還需要上傳并執行構建后的deploy.sh腳本文件,具體腳本如下所示:
# 設置jdk路徑 exportJAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64 exportPATH=$JAVA_HOME/bin:$PATH # 設置jar路徑和文件名 JAR_PATH=/root/deploy_data JARFILE=webserver-1.0.0-SNAPSHOT.jar # kill掉正在運行的java進程 ps -ef | grep$JARFILE| grep -v grep | awk'{print $2}'| xargskill-9 # 開啟一個新的java進程 nohupjava -jar -Xms512m -Xmx1024m$JAR_PATH/$JARFILE> out.log 2>&1 & if[ $? -eq 0 ];then sleep30 tail-n 50 out.log fi
這個腳本文件需要根據服務器中jdk的路徑以及jar的路徑和名稱進行修改!
8.保存配置并構建
? 配置完成后,點擊頁面底部的“保存”或“應用”按鈕。
? 返回項目主頁,點擊“立即構建”或“Build Now”按鈕,啟動第一次構建。
在這里插入圖片描述
9.查看構建結果
? 構建過程會在Jenkins的控制臺輸出中顯示,你可以點擊項目主頁左側的“控制臺輸出”查看構建日志。
? 如果構建成功,Jenkins會顯示一個綠色的“成功”標記,如果失敗,則顯示紅色“失敗”標記。
在這里插入圖片描述
通過以上步驟,你就可以在Jenkins中成功新建并配置一個Maven項目,實現自動化構建。
-
軟件
+關注
關注
69文章
5150瀏覽量
89205 -
自動化
+關注
關注
29文章
5780瀏覽量
84813 -
源代碼
+關注
關注
96文章
2953瀏覽量
68348 -
jenkins
+關注
關注
0文章
33瀏覽量
5330
原文標題:掌握Jenkins自動化部署:從代碼提交到自動上線的全流程揭秘
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
jenkins有什么用_jenkins如何自動部署

云平臺的自動化部署設計與實現

Jenkins+docker+springboot一鍵自動部署項目
Jenkins+Docker一鍵自動化部署SpringBoot最簡流程
Jenkins+Docker一鍵自動化部署SpringBoot項目
Jenkins+Docker實現一鍵自動化部署項目!
Jenkins+Docker一鍵自動化部署SpringBoot應用最精簡流程

使用Jenkins和單個模板部署多個Kubernetes組件

Flexus X 實例 Docker+Jenkins+gitee 實現 CICD 自動化部署 - 解放你的雙手~

Jenkins 與 SonarQube 集成部署,自動化代碼質量監控

評論