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 上传到镜像仓库,镜像仓库设置动作是否更新所有容器。