1. 程式人生 > >Jenkins+docker自動化部署管理springBoot專案

Jenkins+docker自動化部署管理springBoot專案

* 伺服器環境支援 Jenkins服務+Git+Maven+Docker

1.開啟jenkins構建一個maven專案,名字取為maven-test


2.填寫jenkins配置


3.立即構建


    到此jenkins構建成功 我們可以拿到專案構建的最新jar包(/root/.jenkins/workspace/docker-test/target/docke-test.jar),接下來就要考慮怎麼把jar包自動化部署到docker容器中。

4.編寫Dockerfile檔案

在專案操作的路徑(/work/project)下建立Dockerfile檔案


編輯Dockerfile檔案內容為

#基於openjdk:8
FROM openjdk:8

# 指定當前操作目錄
WORKDIR /work/project

#容器啟動後執行的操作
CMD java -jar docker-test.jar

5.編寫jenkins中打包成功後執行的shell指令碼

開啟jenkins中的配置選擇 Pre Steps  - Add post-build step - 執行shell


 指令碼值設定為

#操作/專案路徑(Dockerfile存放的路勁)
BASE_PATH=/work/project
# 源jar路徑  
SOURCE_PATH=/root/.jenkins/workspace  
#docker 映象/容器名字或者jar名字 這裡都命名為這個
SERVER_NAME=docker-test
#容器id
CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')
#映象id
IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')

DATE=`date +%Y%m%d%H%M`

# 最新構建程式碼 移動到專案環境
function transfer(){
    echo "最新構建程式碼 $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar 遷移至 $BASE_PATH ...."
        cp $SOURCE_PATH/$SERVER_NAME/target/$SERVER_NAME.jar $BASE_PATH 
    echo "遷移完成"
}

# 備份
function backup(){
	if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
    	echo "$SERVER_NAME.jar 備份..."
        	cp $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
        echo "備份 $SERVER_NAME.jar 完成"
    else
    	echo "$BASE_PATH/$SERVER_NAME.jar不存在,跳過備份"
    fi
}

# 構建docker映象
function build(){
	if [ -n "$IID" ]; then
		echo "存在$SERVER_NAME映象,IID=$IID"
	else
		echo "不存在$SERVER_NAME映象,開始構建映象"
			cd $BASE_PATH
		docker build -t $SERVER_NAME .
	fi
}

# 執行docker容器
function run(){
	backup
	transfer
	build
	if [ -n "$CID" ]; then
		echo "存在$SERVER_NAME容器,CID=$CID,重啟docker容器 ..."
			docker restart $SERVER_NAME 
		echo "$SERVER_NAME容器重啟完成"
	else
		echo "不存在$SERVER_NAME容器,docker run建立容器..."
			docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 3636:3636 $SERVER_NAME
		echo "$SERVER_NAME容器建立完成"
	fi
}

#入口
run    

這段shell指令碼大致流程 

a.備份(/work/project)下jar包

cp /work/project/docker-test.jar /work/project/backup/docker-test-201805171416.jar

b.專案構建的最新jar包(/root/.jenkins/workspace/docker-test/target/docke-test.jar)移動到專案操作的路徑(/work/project)

cp /root/.jenkins/workspace/docker-test/target/docker-test.jar /work/project

c.判斷docker映象是否存在,不存在則進入Dockerfile存放的路徑(/work/project)執行docker build操作構建名字為docker-test映象

cd /work/project
docker build -t docker-test .

d.判斷docker容器是否存在,不存在則執行docker run命令建立容器,存在則docker restart重啟容器

docker run --name docker-test -v /work/project/:/work/project/ -d -p 3636:3636 docker-test
docker restart docker-test

docker run引數

   --name docker-test                 容器的名字為docker-test
   -d                                 容器後臺執行
   -p 3636:3636                       指定容器對映的埠和主機對應的埠都為3636
   -v /work/project/:/work/project/   將主機的/work/project/目錄掛載到容器的/work/project/ 目錄中(不可少每次本地更新jar包重啟容器即可,不用重新構建映象)

6.效果檢測

上步操作指令碼寫好儲存後 點選立即構建檢視日誌如下圖代表專案自動化打包構建成功


檢視映象


檢視容器


訪問專案

   

編輯介面返回值,提交程式碼


點選立即構建,構建成功訪問專案


    可以發現專案修改重新自動部署成功~~~