jenkins+git構建jar包並把jar包執行在docker容器自動化部署
阿新 • • 發佈:2021-11-13
這篇部落格的目的實現:使用jenkins從git倉庫拉取java專案程式碼,並打成jar,然後在jenkins把jar包執行在docker容器裡
準備工作:
1、在CentOs7伺服器上安裝好jenkins (怎麼安裝請看之前的部落格:https://www.cnblogs.com/spll/p/10020597.html)
2、在jenkins上做好全域性配置jdk和maven (怎麼配置,請看之前的部落格:https://www.cnblogs.com/spll/p/9935891.html)
(需要注意:我本來想用docker安裝jenkins,並執行jenkins,奈何在jenkins裡配置jdk和maven總是配置不上,百度了其他部落格後發現docker執行的jenkins容器確定配置起來好麻煩,所以才用伺服器直接安裝jenkins,這樣配置起jdk和maven來確實方便多了)
接下來進入正題:
借鑑部落格:https://www.cnblogs.com/sxdcgaq8080/p/10599166.html
一、jenkins上jdk和maven都配置好了,直接新建任務,輸入名稱,選擇下面的構建一個maven專案
二、在任務配置頁面,原始碼管理這配置git,我的git倉庫地址用的碼雲,連線的賬號密碼在下面新增一個就行
三、如果maven配置好了,Build這裡直接填上pom.xml,clean package
四、在配置Post Steps這裡輸入一行shell命令,這個命令執行了一個shell命令檔案:dockerRun.sh,這個指令碼檔案裡的目的就是通過shell命令把jenkins構建時生成的jar包移動到我們指定的目錄,然後在指定目錄里根據此jar包建立docker的映象,然後執行命令建立容器並啟動
4.1、dockerRun.sh檔案我放在/home/javaProject目錄下,此目錄下需要兩個檔案,一個dockerfile用來生成docker映象,另一個就是dockerRun.sh指令碼命令檔案,如下:
4.2、建立dockerfile檔案:vi dockerfile,並內容如下:
FROM java:8 VOLUME /tmp Add test01.jar test01.jar EXPOSE 8080 ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test01.jar"]
add test01.jar test01.jar 第一個jar是當前所在目錄下的專案jar包,第二個是重新命名
4.3、建立dockerRun.sh指令碼檔案內容如下:
#===================================================================================== #=================================1、定義初始化變數====================================== #===================================================================================== #操作/專案路徑(Dockerfile存放的路徑) BASE_PATH=/home/javaProject #專案名稱 SERVER_NAME=test01 #獲此專案的取容器id CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}') #獲取此專案的映象id IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}') #===================================================================================== #=========================2、移動jenkins已經構建好的jar包到Dockerfile所在目錄========================= #===================================================================================== # 查詢源jar檔名,進行重新命名,最後將原始檔移動到Dockerfile檔案所在目錄 function transfer(){ echo "=========================>>>>>>>移動jenkins構建好的jar到Dockerfile所在目錄,並重命名為test01.jar" mv /var/lib/jenkins/workspace/test01/target/jz-project-0.0.1-SNAPSHOT.jar /home/javaProject/test01.jar echo "=========================>>>>>>>遷移完成Success" } #===================================================================================== #==================================3、構建最新映象======================================= #===================================================================================== # 構建docker映象 function build(){ #無論映象存在與否,都停止原容器服務,並移除原容器服務 echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID" docker stop $CID echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID" docker rm $CID #無論如何,都去構建新的映象 #構建新的映象之前,移除舊的映象 if [ -n "$IID" ]; then echo "=========================>>>>>>>存在$SERVER_NAME映象,IID=$IID" echo "=========================>>>>>>>移除老的$SERVER_NAME映象,IID=$IID" docker rmi $IID echo "=========================>>>>>>>構建新的$SERVER_NAME映象,開始---->" echo "=========================>>>>>>>構建新的$SERVER_NAME映象,完成---->" else echo "=========================>>>>>>>不存在$SERVER_NAME映象,構建新的映象,開始--->" cd $BASE_PATH docker build -t $SERVER_NAME . echo "=========================>>>>>>>構建新的$SERVER_NAME映象,結束--->" fi } #===================================================================================== #==============================4、最後執行docker容器,啟動服務=============================== #===================================================================================== # 執行docker容器 # 先備份老的jar包 # 再移動新的jar包到Dockerfile檔案所在目錄 # 接著,構建新的映象 # 最後執行最新容器,啟動服務 function run(){ transfer build docker run -d --restart=always --name $SERVER_NAME -v /usr/local/apps/docker-demo/logs:/home/javaProject/logs -p 8080:8080 $SERVER_NAME } #入口 run
如此一個構建任務的所有配置就算弄好了。。。
儲存後點構建,控制檯輸出日誌成功如下:完美,日誌上也沒報錯資訊
再看伺服器,檢視正在執行的容器:docker ps,成功如下:
。。。