天天看點

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

作者:石添的程式設計哲學
[啤酒]滿懷憂思,不如先幹再說!做幹淨純粹的技術分享!歡迎評論區或私信交流!

軟體系統開發最後都需要打包到伺服器上線,每次手動打包,再上傳到伺服器的動作都是重複而枯燥的,如果我們的代碼送出到git倉庫後可以自動部署到伺服器就非常哇塞,那麼Jenkins就可以幫助我們實作這自動化的工作。

技術背景

  • 通過maven建立的springboot項目
  • 代碼通過gitee管理,測試完成後通過IDEA送出到gitee上
  • 在阿裡雲伺服器中配置自動化部署環境,其中Jenkins檢測到有代碼送出到分支則自定拉取并執行腳本打包項目

實作流程

  • 使用Jenkines需要在伺服器上安裝配置好JDK、git、maven
  • 在伺服器上安裝,啟動并通路Jenkines
  • 配置Jenkines環境和git倉庫關聯
  • 設定項目建構腳本
  • 送出代碼測試是否打包完成

下載下傳安裝Jenkines

在任意的Linux系統上【可以是虛拟機,也可以是購買的雲伺服器】通過 https://www.jenkins.io/ 通路Jenkins官網下載下傳,是一個war包

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

上傳到伺服器上,通過以下指令啟動:

nohup java -jar jenkins.war --httpPort=8888 > jenkins.log 2>&1 &           
  • nohup:表示需要背景運作,會輸出一個PID【程序号】;
  • --httpPort=8888:設定占用8888端口号;
  • > jenkins.log 2>&1 &:表示将日志輸出到目前 jenkins.log 檔案中,并且背景運作;

上邊的啟動方式大概會占用2G左右記憶體,可以使用以下指令設定JVM記憶體占用:

nohup java -Xms1024m -Xmx1024m -XX:PermSize=512M -XX:PermSize=1024M -jar jenkins.war --httpPort=8888 > /var/opt/jenkins/jenkins.log 2>&1 &           
注意:實際的war上傳位置,日志輸出檔案路徑和JVM參數可以根據個人情況而定

通路Jenkins

此時就可以使用浏覽器通過 ip:port 通路Jenkins。首次進入需要建立一個使用者,點選儲存并完成即可

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

配置Jenkines

登陸Jenkines後點選左側 建立項目

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

設定項目名稱和類型,如果你之前配置過也可以克隆一個

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

配置JDK和git倉庫

此處需要你事先安裝好JDK和Git,這裡我得代碼使用gitee平台托管,選擇gitee

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

配置gitee倉庫位置

直接從gitee上指派倉庫連結,并且填寫倉庫賬号和密碼

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

如果出現下方的 無權通路,則需要配置gitee使用者,或者使用者名和密碼寫錯了

設定拉取政策

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

點選 新增,設定逾時10分鐘

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

配置觸發器

建構觸發器,配置通過gitee倉庫的 webhook 觸發,此處的URL需要配置在gitee倉庫中,一會可以過來複制

選擇觸發政策,這裡勾選推送代碼和建立推送請求時時觸發,按自己的實際情況選擇觸發時機

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

接下來配置分支,也就是監控哪些分支變化和排除哪些分支變化,此處配置的是master分支變化,排除掉dev分支

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

生成 webhook 密碼,也是在gitee倉庫中配置時需要,一會過來複制

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

配置建構項目

此處就是把代碼拉取下來後要幹什麼事情,首先根據pom.xml檔案執行以下腳本,maven的打包指令應該都懂

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器
clean package -Dmaven.test.skip=true           

再配置任務腳本,執行以下指令可以将上邊指令打的包複制到指定目錄中,結束掉之前的java程序并啟動新的java程序完成服務釋出

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

自動部署腳本

該腳本會在項目都建完成之後運作。其中啟動的程序會在腳本執行完成之後全部殺死,如果在該腳本中啟動了程式不希望被殺掉,則添加 BUILD_ID=dontKillMe。其中dontKillMe可以删掉

#!/bin/bash

echo "建構XXX項目"
JAR_PATH="/var/opt/shitiantian"
PROJECT_NAME="tian"

echo "關閉原程序"
# 找到之前項目jar包程序ID并殺死
pid=`ps -ef | grep $PROJECT_NAME.jar | grep -v grep | awk '{print $2}'`
echo $pid
if [ -n "$pid" ]
then
   kill -9 $pid
fi
echo "停止運作"
# 将Jenkines打的包移動到指定目錄
mv ${WORKSPACE}/springboot-project/target/$PROJECT_NAME.jar $JAR_PATH/$PROJECT_NAME.jar

# 背景運作項目jar包
BUILD_ID=dontKillMe
nohup java -jar $JAR_PATH/$PROJECT_NAME.jar > $JAR_PATH/$PROJECT_NAME.log 2>&1 &
echo "success"           

gitee配置

我這裡使用gitee企業版,個人版也是同樣的操作,進入到倉庫中選擇 倉庫設定

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

點選 webhook 建立 webhook

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

配置Jenkines項目路徑和密碼,進行關聯,此處的事件可以選擇自己需要的。

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

注意:此時你伺服器上的Jenkines端口必須可以通路到,如果是阿裡雲伺服器到安全組中開放對應端口,如果自建伺服器記得設定防火牆,非常重要

當送出代碼時則會執行任務,在Jenkines首頁會看到對應的任務執行

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

檢視建構腳本

如果找不到jenkines打的jar包或者war包,則可以從控制台輸出的編譯打包資訊中擷取,如下圖

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

此時伺服器上就已經有這個程序在啟動了

解放雙手 | 通過jenkins自動化部署送出到git的maven項目到伺服器

這就是通過Jenkines實作簡單的自動化部署,非常實用,趕緊使用起來吧,如果有任何問題歡迎評論區交流

繼續閱讀