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 上传到镜像仓库,镜像仓库设置动作是否更新所有容器。
Jenkins (自动使用docker容器发布java.war +tomcat)的更多相关文章
- 使用jenkins自动构建docker容器范例
1.登录Jenkins,新建一个自由风格的软件项目. 2.源码管理选择git,并添加Repository URL.Credentials 3.构建选择 Execute Shell,命令如下: dock ...
- 使用Jenkins来构建Docker容器
使用Jenkins来构建Docker容器(Ubuntu 14.04) 当开发更新了代码,提交到Gitlab上,然后由测试人员触发Jenkins,于是一个应用的新版本就被构建了.听起来貌似很简单,dua ...
- 如何设置Docker容器中Java应用的内存限制
如果使用官方的Java镜像,或者基于Java镜像构建的Docker镜像,都可以通过传递 JAVA_OPTS 环境变量来轻松地设置JVM的内存参数.比如,对于官方Tomcat 镜像,我们可以执行下面命令 ...
- docker容器运行java后台程序,存到数据库的时间差一天的问题
主要原因是docker容器中的时间用的是标准时间,不是用的宿主机的时间. 修改方法: docker run -e TZ="Asia/Shanghai" -d -p 80:80 -- ...
- 从零开始使用Jenkins来构建Docker容器(Ubuntu 14.04)
当开发更新了代码,提交到Gitlab上,然后由测试人员触发Jenkins,于是一个应用的新版本就被构建了.听起来貌似很简单,duang~duang~duang,我用了是这样,你们用了也是这样,看起来这 ...
- Docker容器发布spring boot项目
一.安装Docker环境 yum install docker 安装完成后,使用下面的命令来启动 docker 服务,并将其设置为开机启动: systemctl start docker.servic ...
- Gitlab+Jenkins学习之路(十一)之Jenkins自动触发构建和发布
思路图: 一.下载gitlab plugin jenkins-->系统管理-->管理插件-->下载并安装gitlab plugin 二.配置gitlab认证 路径:Jenkins-- ...
- 局域网内利用gitlab,jenkins自动生成gitbook并发布(nginx)
安装了GitBook,内网使用,没法用上gitbook的网页. 用gitbook serve只能展示一本书,而且也不利于长期维护. 于是使用gitlab,jenkins,和nginx配合gitbook ...
- docker容器内 java应用程序启动慢
原谅我对JVM 不是很熟悉. 参考http://hongjiang.info/tomcat-startup-slowly-in-docker/ 感谢作者.
随机推荐
- java中变量和标识符名命名规范
变量存放的是内存地址,当定义一个变量后,我们可以通过变量名找到该内存地址,可以修改该内存区间的值. 标识符的命名规范:首字母:字母,下划线,$符号:其余部分:数字,字母,下划线,$. 标识符应该避开j ...
- linux security module机制
linux security module机制 概要 Hook机制,linux MAC的通用框架,可以使用SElinux, AppArmor,等作为不同安全框架的实现
- 「译」Blazor VS React React / Angular / Vue.js
原文作者: Christian Findlay 原文链接: https://christianfindlay.com/2020/06/04/blazor-vs-react-angular-vue-js ...
- 递归的三部解题曲 关联leetcode 104. 二叉树最大深度练习
递归关心的三点 1. 递归的终止条件 2. 一级递归需要做什么 3. 返回给上一级递归的返回值是什么 递归三部曲 1. 找到递归的终止条件:递归什么时候结束 2. 本级递归做什么:在这级递归中应当完成 ...
- slice,splice,split,unshift的用法
工作了很久始终对这4个用法处于混淆状态,今天写个帖子来警示下自己 // slice(start,end),从start值开始截取到end前的元素组成新的数组,不改变原数组 // slice(index ...
- JavaScript正则表达式详解
在JavaScript中,正则表达式由RegExp对象表示.RegExp对象呢,又可以通过直接量和构造函数RegExp两种方式创建,分别如下: //直接量 var re = /pattern/[g | ...
- 一次snapshot迁移引发的Hbase RIT(hbase2.1.0-cdh6.3.0)
1. 问题起因 通过snapshot做跨集群数据同步时,在执行拷贝脚本里没有指定所有者及所有组,导致clone时没有权限,客户端卡死.master一直报错,经过一系列操作后,导致RIT异常. 2. 异 ...
- 【MySQL】ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing
今天上午遇到了一个问题,新创建的mysql5.7的数据库,由于初始化有点问题,没有给root密码,用了免密码登录. 但是,修改了root密码之后,把配置中的免密登录的配置注释掉后,重启服务.服务正常启 ...
- 【ORA】ORA-4031错误分析和解决办法
1. ORA-4031错误的原因,一般是大量的hard parse导致了shared pool中的free list中产生大量的内存小碎片,当一个需要很大内存来进行hard parse的sql语句到来 ...
- ctfhub技能树—文件上传—前端验证
打开靶机 查看页面信息 尝试直接上传一句话木马 提示不允许上传 查看源码 发现仅允许上传.jpg,.png,.gif三种格式的文件 上传shell.jpg并使用burpsuite抓取数据包 添加完成后 ...