Jenkins (自動使用docker容器發布java.war +tomcat)


一、大概流程

因為目前沒有找Jenkins 和docker 之間比較友好的插件,所以只能使用這種比較low 的方式來實現自動部署了。

1、Jenkins在gitlab拉取項目並編譯。

2、將編譯后的代碼及dockfile腳本傳遞到部署服務器

3、通過構建后操作,生成鏡像,並啟動容器

二、Jenkins配置

1、創建項目及填寫相關項目信息,以及源碼管理選擇git這些就不說了,之前的文章都寫過了,有興趣的朋友可以去看下

2、選擇構建

3、構建后操作,選擇 Send build  artifacts over SSH

 

 4、腳本詳情

imagesid=`docker images|grep -i docker-test|awk '{print $3}'`
project=/testdockfile/
dockerid=`docker ps -a|grep -i docker-test|awk '{print $1}' `
echo $project
if  [ ! -n "$imagesid" ];then
   echo $imagesid "is null"
else
    docker rmi $imagesid -f
fi
cd $project

docker build -t docker-test .

if  [ -n "$dockerid" ]  ;then
   docker stop $dockerid
   docker rm -f $dockerid
else
   echo 'dockerid is null'
fi
docker run -it -d -p 8080:8080 -t "docker-test"

這個腳本主要是為了檢測容器和鏡像是否存在,滾動更新。

5、項目目錄下所攜帶的dockerfile文件

這里的form就是引用了基礎鏡像的名稱,基礎鏡像里包含jdk和tomcat環境

FROM java8
ADD ./target/raymedy.war /root/apache-tomcat-7.0.92/webapps
EXPOSE 8080
CMD /root/apache-tomcat-7.0.92/bin/catalina.sh  run

我這里放在了項目的根目錄下

 

三、部署機器操作

為了部署的時候更為方便快捷,所以提前准備一個基礎鏡像並測試,看是否可以正常訪問到tomcat的8080端口,當然其他端口也可以

基礎鏡像

#基本鏡像
FROM centos   
#把你上傳的jdk放到docker容器里面的root目錄下
ADD  jdk-8u65-linux-x64.tar.gz /root 
#把你上傳的Tomcat放到docker容器里面的root目錄下
ADD apache-tomcat-7.0.92.tar.gz /root 
#設置環境變量a
ENV JAVA_HOME /root/jdk1.8.0_65
#設置環境變量
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar  
#設置環境變量
ENV CATALINA_HOME /root/apache-tomcat-7.0.92
#設置環境變量
ENV CATALINA_BASE /root/apache-tomcat-7.0.92
#設置環境變量
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin 
#運行tomcat
CMD /root/apache-tomcat-7.0.92/bin/catalina.sh  run

然后build這個dockfile

docker build -t java8 .

 

四、開始構建

相關輸出

SSH: EXEC: STDOUT/STDERR from command [imagesid=`docker images|grep -i docker-test|awk '{print $3}'`
project=/testdockfile/
dockerid=`docker ps -a|grep -i docker-test|awk '{print $1}' `
echo $project
if  [ ! -n "$imagesid" ];then
   echo $imagesid "is null"
else
    docker rmi $imagesid -f
fi
cd $project

docker build -t docker-test .

if  [ -n "$dockerid" ]  ;then
   docker stop $dockerid
   docker rm -f $dockerid
else
   echo 'dockerid is null'
fi
docker run -it -d -p 8080:8080 -t "docker-test"] ...
/testdockfile/
Error response from daemon: conflict: unable to delete faf5096ab572 (cannot be forced) - image is being used by running container c9c7727b0212
Sending build context to Docker daemon 45.61 MB

Step 1/4 : FROM java8
 ---> 881d2729a9d1
Step 2/4 : ADD ./target/raymedy.war /root/apache-tomcat-7.0.92/webapps
 ---> 3324b015bcdf
Removing intermediate container 8a9af289e52d
Step 3/4 : EXPOSE 8080
 ---> Running in 57e77b95c298
 ---> 568119a5968f
Removing intermediate container 57e77b95c298
Step 4/4 : CMD /root/apache-tomcat-7.0.92/bin/catalina.sh  run
 ---> Running in e1aae5fae303
 ---> 116133c44832
Removing intermediate container e1aae5fae303
Successfully built 116133c44832
c9c7727b0212
c9c7727b0212
88a142f5f877400b8277bed0aec3a049c918b98e66b89c08c93fd018686e9757
SSH: EXEC: completed after 3,803 ms
SSH: Disconnecting configuration [192.168.10.110] ...
SSH: Transferred 2 file(s)
Finished: SUCCESS

 

查看docker鏡像及容器運行情況

查看端口

最終頁面

 

小節:應該更為方便的是能自動生成dockfile 文件,然后通過Jenkins 上傳到鏡像倉庫,鏡像倉庫設置動作是否更新所有容器。


免責聲明!

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



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