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


這篇博客的目的實現:使用jenkins從git倉庫拉取java項目代碼,並打成jar,然后在jenkins把jar包運行在docker容器里

(重點:有了這套自動化部署,不用再跑到服務器上打包上傳,使用命令運行項目了。而是直接上傳代碼到git倉庫,然后登錄jenkins點擊構建,項目便發布成功)

 

准備工作:

  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配置maven,並修改maven的setting.xml配置文件,配置阿里雲鏡像倉庫。要不然每次打包很慢,要下載依賴的jar包。我用的maven3.6.0版本。

 

   maven的setting.xml配置內容:

  <localRepository>/home/maven/repo</localRepository>
 
  <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>
 </mirror>

 

 

 

 

 

  一、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文件所在目錄
# 接着,構建新的鏡像
# 最后運行最新容器,啟動服務   2022年2月20日20:38:06:加上 -e TZ="Asia/Shanghai" 這條命令,不然項目里面的時間與服務器的時間不一致
function run(){
    transfer
    build

    docker run -d -e TZ="Asia/Shanghai" --restart=always --name $SERVER_NAME -v /usr/local/apps/docker-demo/logs:/home/javaProject/logs
-p 8080:8080 $SERVER_NAME

}

#入口
run

 

 

    如此一個構建任務的所有配置就算弄好了。。。

 

    

    保存后點構建,控制台輸出日志成功如下:完美,日志上也沒報錯信息

 

 

  再看服務器,查看正在運行的容器:docker ps,成功如下:

 

   打開瀏覽器訪問服務器地址,成功如下:

 

 

 

 

 

 

。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM