前面瞭解了 Jenkins 上各種任務的區別後,我們就來實踐應用下,先建立一個【資料夾】型別的任務,將我們目前的一些基礎的演示任務【移動】到資料夾裡面去,這樣可以先做個簡單的分類。

新建一個【資料夾】型別的任務,名稱為 Jenkins-Basic



可以看到【資料夾】型別的任務可配置的內容很少,不做特殊設定,預設即可:



然後我們將前面的演示專案移動到這個資料夾下面:





接下來我們將做個實戰任務,演示任務的構建、打包、上傳、部署等操作,以及詳細解析任務的各個配置階段。

新建一個【構建一個自由風格的軟體專案】型別的任務,名稱為 demo-todo-list



配置如下:



我構建了多次才成功,主要是下載構建工具 Gradle 超時,在第九次構建後才成功,構建後看看日誌如下:





我們現在調整下配置,在【構建後操作】下面新增一項【Send build artifacts over SSH】,這樣做的目的是將我們構建出來的可執行 jar 包傳送到我們的伺服器,然後在用命令列啟動我們的 Spring boot 應用:



簡單說下這裡的配置:在 SSH Server Name 這裡展開選擇我們之前配置好的一臺伺服器;Source files 定位到我們 jar 包的位置;Remove prefix  和 Remote directory 是可選的,我這裡為了目錄簡潔,在 Remove prefix 這裡填入 build/libs/,這表示會將 Source files 中 build/libs/demo-todo-list*.jar 的前面 build/libs/ 移除掉;Remote directory 我這裡填入的是 service-deploy,這表示將檔案傳送到遠端伺服器使用者目錄下的 service-deploy 資料夾下面,需要注意的是要確保目錄 service-deploy 存在。然後在 Exec command 處填入下面的指令:

# 進入到指定的目錄
cd service-deploy # 檢查服務是否在執行,如果在執行就將其停掉
ps -ef | grep demo-todo-list | grep -v grep | awk '{print $2}' | xargs kill -15 | echo "todo list 服務不存在" # 將舊的 jar 刪除
rm -rf demo-todo-list.jar # 將新的 jar 重新命名下
mv demo-todo-list*.jar demo-todo-list.jar # 啟動我們的服務
nohup java -jar demo-todo-list.jar > /dev/null 2>nohup.log &

然後去到我們的伺服器上看看相關情況,看看目錄結構以及服務的啟動日誌:

到這裡,一個實戰的 Jenkins 任務就完成了。接下來就詳細說說任務配置中的各個設定項的意義。

在 Jenkins 任務的配置裡面主要分如下幾個大類可以設定:【General】、【原始碼管理】、【構建觸發器】、【構建環境】、【構建】以及【構建後操作】。

【General】主要是對任務進行一些前期的設定,裡面一個重要的設定是【引數化構建過程】,例如我們可以通過引數來控制要構建哪一個分支,或者構建時會用到的引數也是通過這裡配置,引數配置可以支援多種型別的引數,常見的有字元引數、密碼引數、布林引數、選項引數、憑據引數和檔案引數等。【原始碼管理】很容易理解,我們的專案程式碼都會通過程式碼倉庫進行管理,目前 Jenkins 支援 Git、Mercurial 和 Subversion 等主流的原始碼管理平臺。【構建觸發器】可以設定為定時構建、輪詢 SCM(定時檢查原始碼倉庫有新的程式碼才構建)、觸發遠端構建(例如通過URL請求觸發)、其他工程構建後觸發等。【構建環境】主要是對構建進行一些環境準備,例如有時候構建專案時需要確保沒有其他無關檔案的影響,就可以設定構建前刪除工作空間,如果需要證書密碼檔案,可以配置新增需要的檔案。【構建】就是真正的專案打包操作的,一般來講主要是將專案構建打包成 jar 包、war 包、可執行檔案、安裝包、或者壓縮檔案,舉個例子如果是 Maven 專案就執行 maven 的打包命令,Gradle 專案就執行 gradle 的打包命令。【構建後操作】主要是將打包出來的檔案傳送到某個地方以及一些通知相關的操作,例如我們打包的 Java 專案最終要部署到某臺伺服器,就通過 SSH 傳送檔案完成,也可以將構建出來的檔案進行存檔,還可以將檔案上傳到OSS 等雲服務物件儲存裡面。如果是構建失敗了我們需要立即知道,還可以配置郵件或者釘釘來立即通知我們。