利用Jenkins實現jdk11+Maven構建springboot項目


原理圖

鑒於網上很多資料一上來直接就開干了,這里我先把這幾天所經歷的理解化成一張圖,以便后續內容更加容易理解。


由上圖可以清晰的看到,只要我們再本地的Idea提交代碼到GitHub遠程倉庫,隨后Github觸發一個web hook(簡單來說就是一個Http請求)。隨后Jenkins接收到這個請求之后,開始根據我們預先設置好的方式構建部署包。然后通過ssh推送到應用服務器部署(部署方式很多樣,可以根據個人需求部署)。

前期准備

Jdk11安裝

由於jenkins服務器是java語言開發的應用,這里需要先安裝jdk,而我也想統一jdk的版本,這里選擇使用Oracle提供的最新版jdk11。下載推薦使用迅雷下載,比一般的瀏覽器要快一點。

點擊下載地址下載,這里使用的是jdk-11.0.6_linux-x64_bin.rpm版本,適合centos系統的安裝。上傳到你的jenkins服務器,使用安裝命令完成。

rpm -ih jdk-11.0.6_linux-x64_bin.rpm

Jenkins安裝

點擊下載地址下載安裝包。同樣使用以下安裝命令完成安裝。

rpm -ih jenkins-2.204.2-1.1.noarch.rpm

啟動jenkins。

systemctl start jenkins

提示:使用jdk11可能會出現如下的提示:

AWT is not properly configured on this server. Perhaps you need to run your container with "-Djava.awt.headless=true"

實際上這個選項已經啟用了,只是jdk11把awt的組件去除了,所以需要安裝這一部分組件中。執行一下命令即可:

yum install java-1.7.0-openjdk urw-fonts

Maven安裝

由於我的項目是基於Maven的SpringBoot項目,所以需要以Maven構建一個部署包,這里順便安裝一下。

點擊下載地址下載。

解壓壓縮包,我把maven放在目錄/opt/maven中,具體的環境變量設計請自行百度,這里的安裝目錄和后續配置有關,所以我提了一下。

Jenkins的設置

jenkins默認在8080端口部署,所以打開瀏覽器頁面就能進入頁面。進入頁面后需要輸入一個原始的admin密碼,根據提示找到密碼輸入,后面可以自己設置一個帳號密碼。

接下來就會有一個推薦插件安裝的頁面。我個人推薦直接跳過這個步驟,因為在內地的網絡環境安裝會非常的卡,同時很有可能會把程序給卡崩潰,這個后面會提到解決方法。

之后進入就可以看到如下界面。

插件安裝

進入Manage Jenkins => Manage Plugins =>Available 查找自己想要的插件。這里推薦幾款這次教程需要的插件:

1.Localization: Chinese (Simplified)

中文翻譯包,想看英文的可以跳過。

2.GitHub plugin、GitHub Integration Plugin

GitHub相關。

3.Maven Integration plugin

Maven相關。

4.Publish Over SSH

Maven生成的Jar包,通過這個插件進行推送,並執行應用服務器的腳本。

插件安裝系列問題:

(1)速度慢,經常失敗。

更改插件鏡像的地址,在Advance選項下面,Update Site這里填寫相應的URL地址。這個需要自行百度查找哪個提供的插件鏡像較快,個人推薦一個:http://mirror.xmission.com/jenkins/updates/update-center.json。這個同時需要一點耐心去完成,因為在內地的網絡無論你用哪個都不會快。而我用香港的服務器都是5s之內就能完成。

(2)插件安裝提示有依賴插件沒有更新或安裝

這個按照提示去找對應的依賴插件即可,同時有的插件完成安裝后需要重啟jenkins,所以准備時間會比較繁瑣一點。

變量配置

1.全局工具配置

這里以jdk為例,其它的git、和maven以同樣的方式處理,如果沒安裝,自行百度安裝。

如下圖所示,取消勾選自動安裝,然后JAVA_HOME就是你Jenkins服務器的JAVA_HOME路徑,可以使用which java這個命令查找路徑。

2.系統配置

(1)Publish over SSH

點擊add server添加一個遠程的應用服務器。我的如下圖所示

name:一個名字,自己隨意填寫。

HostName:應用服務器地址,可以是ip地址,也可以是一個域名。

Username:應用服務器的用戶,這里生產環境最好不用root,我就隨意了。

Remote Directory:應用服務器的訪問目錄,請確定你的用戶有該目錄的操作權限

Password:勾選上面的選擇框,然后輸入你的密碼即可。當然這里也有其它驗證方式, 具體自己找一下。

拉到底下,還有一個測試按鈕,可以測試自己的配置是否成功。

3.憑證配置

點擊 :

輸入你的GitHub帳號密碼,這里是用於后面的GitHub倉庫代碼的拉取,后面其它需要用到憑證的地方也可以以同樣的方式添加。

搭建項目

jenkins的配置已經初步完成,我本文的例子是使用Maven來構建的SpringBoot項目。所以接下來先創建一個Maven項目。輸入名字即可創建完成,接下來就是項目的配置了。

1.通用配置

General配置可以不配置,但這里我選擇勾選上丟棄舊的構建,防止構建的jar包擠滿硬盤空間。詳情如圖所示。

2.源碼管理

這里我選用的是Git管理,配置如下所示:

3.構建觸發

顧名思義,jenkins會根據這里的配置選擇在什么時候構建的你項目。這里你可以先選擇跳過,先自己手動構建,后續我會講述利用GitHub的web hook觸發構建。

4.Maven的構建選項

如上圖所示,這里要確定的是你的pom.xml的位置、執行的命令。另外,可以在高級選項那里跳過測試環節,不過這不是一種推薦的做法,測試還是很重要的。

5.構建后操作

jenkins在構建完成后,會根據這里的配置執行相關操作。就如一開始的那張圖片一樣,這里的流程是:把jar包發送到應用服務器,執行啟動腳本

服務器我們之前已經配置好了,現在解釋一下Transfer里面的字段含義。

Source files:要發送的文件,這里我們只需要把生成的jar發送過去即可。路徑匹配和可以參考linux命令。

Remove prefix:目前還沒弄清具體含義。

Remote directory:將文件放在應用服務器的該目錄下,需要注意的是:這里的路徑是基於前面的ssh server路徑配置的。例如:前面的路徑配置了/usr/local/,而這里配置了project/temp/。那么文件的完整路徑應該是:/usr/local/project/temp/*.jar

Exec command:應用服務器中的啟動腳本路徑,可以根據自己的喜好放置。同時我不太懂shell編程,寫了一個參考版的啟動腳本,看看就好。

#!/bin/sh
PROJECT_DIR="/usr/local/project/"
#刪除當前已啟動的舊項目,只適用於只有一個java項目的時候
proName="java"
echo "${proName}"
PID=$(ps -e|grep ${proName}|awk '{printf $1}')
echo "$PID"
if [ $? -eq 0 ]; then
    echo "process id:$PID"
else
    echo "process ${proName} not exit"
    exit
fi
kill $PID
#刪除已存在與project目錄的jar包
rm -f ${PROJECT_DIR}counsel*.jar
#復制新的jar到當前路徑
mv ${PROJECT_DIR}temp/counsel*.jar ${PROJECT_DIR}
#啟動新的項目
nohup java -jar ${PROJECT_DIR}counsel*.jar >${PROJECT_DIR}output

配置完成,點擊保存即可,可以嘗試先手動構建一次,如果成功了,就可以繼續接下來的自動化構建。

自動化構建的文章下次再更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM