修改代碼,打包,上傳,重啟... 大把的時間花費在這些重復無味的工作上。筆者與當前主流的價值觀保持一致:我們應該把時間花費在更有意義的事情上。我們可以嘗試借助一些工具,讓這些重復機械的工作交給計算機去完成,這也是我們做軟件開發的核心思想。
借用 Jenkins 持續集成重復工作是一個很不錯的選擇。
研究 Jenkins 的最終目的是解決公司中 Java Web 項目的自動化部署,公司項目本身是由幾個服務,一個 API 項目以及不同客戶端組,希望部署到不同服務器。初次使用 Jenkins 應用於現有的項目,一般規律是這樣的:第一次總是困難的,困難的事情結合困難的事情就叫難上加難,我們需要先把問題化小。筆者最終將問題暫時轉化為如下問題:
基於 Maven 構建的 Java Web 項目,使用 Jenkins 部署到另一台機器上。
<!-- more -->
部署准備
-
在本地測試通過,可以通過
maven
構建的項目 -
項目提交至遠程
git
服務器 -
Java Web 項目的運行服務器上具有項目所需要的運行環境
-
Supervisor 進程管理工具
筆者已將此次工作的項目提交至 Github(項目名稱是 testweb,項目地址),並提前整理了兩篇工具安裝及使用的教程: 進程管理工具Supervisor的安裝及使用,Jenkins的安裝及部署。
Jenkins 配置
-
Jenkins 插件依賴
Jenkins 需要具備的插件:Publish Over SSH
,Maven Integration plugin
,Git plugin
-
構建環境配置
進入 主界面 > 系統管理 > Global Tool Configuration 配置構建所需的 Maven 執行環境,Java 運行環境,Git 執行環境,所涉及的 JAVA_HOME
、 Git executable
、MAVEN_HOME
的內容與 Jenkins 運行機器配置同步。
-
SSH 配置
進入 主界面 > 系統管理 > 系統設置 編輯 Publish over SSH 配置項:
其中,Key
的填入值是運行 Jenkins 用戶對應的 /home/{username}/.ssh/id_rsa
項目運行進程配置
使用 maven 構建后,項目可以通過 java -jar {projectName}.war
運行,我們使用 Supervisor 確保此命令已守護進程方式運行。在 Supervisor 子進程配置文件下加入 testweb.conf
,內容大致如下:
[program:testweb] command=java -jar /{ssh配置的目錄}/testweb.war stdout_logfile={日志輸出目錄}/testweb.log user=root autostart=true autorestart=true startsecs=30 startretries=5
創建 Jenkins 集成部署項
進入 主界面 > 新建 創建新的部署項,我們選擇構建一個Maven項目,做以下配置:
-
項目基本配置
基本配置包括項目的名稱,項目簡介
-
項目源碼來源
我們源碼來源是遠程 git 倉庫,選擇 git ,然后填入項目的 git 地址
-
構建觸發器、構建環境、前置構建工作暫時不用修改,保持默認即可
-
build 配置
我們的 JavaWeb 項目是基於 Maven 構建,所以我們需要填入 Maven 構建的 root pom 地址
-
構建后的操作
構建后的操作是部署到其他服務器的關鍵步驟,項目最終配置如下:
將 Source files 傳輸到 SSH Server,刪除 Remove prefix 前綴,然后在 SSH Server 執行 Exec command。
執行構建
進入 項目面板,點擊立即構建,開始一次構建任務,項目面板效果如下:
確保最終構建是藍色,如果是紅色或者黃色,我們就需要進入構建日志,排查問題了