部署SpringBoot的jar包項目讓人頭疼,不如使用jenkins+docker自動化部署jar包項目

背景

如果SpringBoot的jar包項目採用傳統的方式去打包部署到服務器上,會非常的繁瑣和麻煩。每次項目修改後重新部署,都需要先將項目進行打包,然後將jar包發送到服務器,指定位置,然後在運行java -jar的命令,如果每次都進行人工打包部署,效率會非常的低。所以我們可以採用jenkins+docker的方式實現自動化部署。

jenkins的安裝和使用:暫略
docker的安裝和使用:centos7安裝docker及docker常用命令

jenkins+docker部署SpringBoot的jar包項目

採用部署環境

  • docker採用centos7安裝的
  • jenkins採用win10本地安裝的

服務器當時使用docker安裝的jenkins,安裝git可以成功,但是安裝maven總是失敗,導致在git拉取的項目無法進行打包,各種方法總是失敗。docker安裝的容器互相獨立,也不能使用宿主機安裝的Maven(也可以解決,但是比較複雜)。所以這裏採用win10安裝的jenkins,多餘的操作只是在需要將jar包發送至遠程的服務器。

配置jenkins插件和全局工具配置

配置所需插件

點擊系統管理,選擇插件管理,添加除了新手推薦需要安裝的插件
在這裏插入圖片描述
在這裏插入圖片描述
安裝Publish Over SSH用於連接遠程服務器
在這裏插入圖片描述
安裝Deploy to container插件用於把打包的應用發佈到遠程服務器
在這裏插入圖片描述

進行全局工具配置

如果win10或者服務器安裝的有,可以直接選擇使用(不選擇自動安裝),如果沒有也可以選擇自動安裝。

在這裏插入圖片描述
在這裏插入圖片描述

進行系統設置

去系統設置裏配置Publish over SSH
在這裏插入圖片描述

  • Passphrase 服務器的密碼
  • Path to key 連接遠程服務器密鑰文件的路徑
  • Key 密鑰文件的內容
  • Name 自定義服務器名
  • HostName 服務器IP外網地址
  • UserName 服務器用戶名
  • Remote Directory 傳輸文件的目錄

Publish over SSH可以配置多個,根據Name進行判別。會將所需要傳的文件源串發送至Remote Directory目錄。

構建項目

在這裏插入圖片描述
在這裏插入圖片描述

配置git地址

在這裏插入圖片描述
如果有需要可以構建觸發器,用於自動化構建項目
在這裏插入圖片描述
觸發器建議使用這2種

1.定時構建
定時構建就是沒隔一段時間就是構建1次任務
0 * * * * 代表每小時0分的時候構建1次項目
第1個代表分,第2個代表時,第3個代表日,第4個代表月,第5個代表周

2.輪詢SCM
輪詢SCM就是查看源碼管理的代碼有沒有更新,如果更新了就去構建,沒有更新就不會構建
*/5 * * * * 代表每5分鐘就去查看源碼有沒有更新

當然其他方式的觸發器也可以使用。

配置Maven的構建命令

在這裏插入圖片描述

將拉取並打包到jenkins的workspace的jar包發送至遠程服務器

如果使用服務器上的jenkins的將jar包部署在本服務器上,這個步驟可以省略(只執行shell腳本即可)

在這裏插入圖片描述

  • Source files 項目構建後的目錄(以本項目爲根路徑)
  • Remove prefix 去前綴
  • Remote directoty 發佈的目錄(前綴爲系統設置裏配置Publish over SSH的Remote Directory)
  • Exec command 發佈完執行的命令
Exec command 的shell腳本:
BUILD_ID=dontKillMe /usr/local/dockerApp/blog-parent/docker.sh
解釋:

/usr/local/dockerApp/blog-parent/是服務器放置jar包的目錄
docker.sh是執行docker的相關操作

服務器進行docker相關配置

  1. 進入雲服務器中到項目的目錄下,即/usr/local/dockerApp/blog-parent/
  2. 在該目錄下創建並編寫Dockerfile文件
###指定java8環境鏡像
FROM jdk1.8
###複製文件到容器app-springboot
ADD blog-system.jar blog-system.jar
###聲明啓動端口號
EXPOSE 8090
###配置容器啓動後執行的命令
ENTRYPOINT ["java","-jar","blog-system.jar"]

jdk1.8爲docker安裝的jdk8環境,如果服務器docker爲安裝jdk8,會進行自動安裝。

  1. 創建並配置docker.sh腳本
 # 源jar路徑  即jenkins構建後存放的路徑
  SOURCE_PATH=/data/jenkins/workspace
#docker 鏡像/容器名字或者jar名字 這裏都命名爲這個
  SERVER_NAME=blog-parent
 #容器id
 CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
 #鏡像id
 IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')

 echo "最新構建代碼 $SOURCE_PATH/$SERVER_NAME/target/ms_backend.jar 遷移至 $BASE_PATH ...."
 #把項目從jenkins構建後的目錄移動到我們的項目目錄下同時重命名下
  mv $SOURCE_PATH/blog-system-1.0.0-SNAPSHOT.jar $BASE_PATH/blog-system.jar
 #修改文件的權限
  chmod 777 /usr/local/dockerApp/blog-parent/blog-system.jar
  echo "遷移完成"

 # 構建docker鏡像
         if [ -n "$IID" ]; then
                 echo "存在$SERVER_NAME鏡像,IID=$IID"
                  docker stop $SERVER_NAME   # 停止運行中的容器
                  docker rm $SERVER_NAME     ##刪除原來的容器
                  docker rmi $IID   ## 刪除原來的鏡像

         else
                 echo "不存在$SERVER_NAME鏡像,開始構建鏡像"
                      
        fi
        

  # 構建鏡像 
  cd $BASE_PATH
  docker build -t $SERVER_NAME .
    
# 運行容器
 # --name docker-test                 容器的名字爲docker-test
 #   -d                                 容器後臺運行
 #   -p 8090:8090 指定容器映射的端口和主機對應的端口都爲8090
 #   -v /usr/local/dockerApp/blog-parent:/usr/local/dockerApp/blog-parent   將主機的/usr/local/dockerApp/blog-parent目錄掛載到容器的/usr/local/dockerApp/blog-parent 目錄中
 docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8090:8090 $SERVER_NAME
 echo "$SERVER_NAME容器創建完成"

此shell腳本親測有效,其中關鍵點爲:如果存在鏡像,停止運行中的容器-刪除原來的容器-刪除原來的鏡像-構建新的鏡像-運行新的容器;如果不存在鏡像,構建新的鏡像-運行新的容器

有的博客說,有-v掛載之後,每次本地更新jar包重啓容器即可,不用重新構建鏡像,不知道是否可行,需要測試。測試後在進行更新,

立即構建項目

在這裏插入圖片描述
如果是success說明成功

通過ip+端口,訪問項目接口,測試是否成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章