1. 程式人生 > 其它 >jenkins+git構建jar包並把jar包執行在docker容器自動化部署

jenkins+git構建jar包並把jar包執行在docker容器自動化部署

這篇部落格的目的實現:使用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,成功如下:

。。。