掌握Jenkins自動化部署:從程式碼提交到自動上線的全流程揭秘

轉自:http://7zv.cn/xh7JN

掌握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. 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. 2. 解壓檔案將下載的檔案解壓到你想要安裝的位置,例如/opt目錄:

    sudo tar -zxvf apache-maven-3.8.8-bin.tar.gz -C /opt
  3. 3. 配置環境變數為了方便使用Maven,需要配置環境變數。編輯/etc/profile檔案:

    sudo vi /etc/profile

    在檔案末尾新增以下內容:

    export M2_HOME=/opt/apache-maven-3.8.8export PATH=$M2_HOME/bin:$PATH
  4. 4. 使環境變數生效儲存檔案並退出編輯器,然後使環境變數生效:

    source /etc/profile
  5. 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 installpackage,根據專案需求選擇合適的構建目標。

    在這裡插入圖片描述

7. 構建後操作(Post Steps)

  • • 你可以在“構建後操作”部分新增一些後續步驟,如“傳送郵件通知”或“部署到伺服器”。
  • • 如果你使用Publish Over SSH外掛,可以配置將構建產物上傳到遠端伺服器的步驟。

    在這裡插入圖片描述
此外,這裡還需要上傳並執行構建後的deploy.sh指令碼檔案,具體指令碼如下所示:
# 設定jdk路徑export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64export PATH=$JAVA_HOME/bin:$PATH# 設定jar路徑和檔名JAR_PATH=/root/deploy_dataJARFILE=webserver-1.0.0-SNAPSHOT.jar# kill掉正在執行的java程序ps -ef | grep $JARFILE | grep -v grep | awk '{print $2}' | xargs kill -9# 開啟一個新的java程序nohup java -jar -Xms512m -Xmx1024m $JAR_PATH/$JARFILE > out.log 2>&1 &if [ $? -eq 0 ]; thensleep 30tail -n 50 out.logfi
這個指令碼檔案需要根據伺服器中jdk的路徑以及jar的路徑和名稱進行修改!

8. 儲存配置並構建

  • • 配置完成後,點選頁面底部的“儲存”或“應用”按鈕。
  • • 返回專案主頁,點選“立即構建”或“Build Now”按鈕,啟動第一次構建。

    在這裡插入圖片描述

9. 檢視構建結果

  • • 構建過程會在Jenkins的控制檯輸出中顯示,你可以點選專案主頁左側的“控制檯輸出”檢視構建日誌。
  • • 如果構建成功,Jenkins會顯示一個綠色的“成功”標記,如果失敗,則顯示紅色“失敗”標記。

    在這裡插入圖片描述
透過以上步驟,你就可以在Jenkins中成功新建並配置一個Maven專案,實現自動化構建。
END
想要學習Linux系統的讀者可以點選"閱讀原文"按鈕來了解書籍《Linux就該這麼學》,同時也非常適合專業的運維人員閱讀,成為輔助您工作的高價值工具書!

相關文章