设为首页 收藏本站
查看: 1057|回复: 0

[经验分享] jenkins+docker的简单项目部署

[复制链接]

尚未签到

发表于 2018-9-4 09:35:21 | 显示全部楼层 |阅读模式
  怎么使用docker实现新项目的发布,一般有两种方式,以一个web容器为例:
  1:定制一个通用的web容器镜像,以逻辑卷-v的方式,关联webapp目录到宿主机,每次发布新版本时只需要更新宿主机上关联目录的项目包(例如war包),然后重启web的相关docker容器。完成新版本发布。
  2:以dockerfile的方式,每次发布新版本时,把相应的程序包传入dockerfile,一起打包成一个新的web容器镜像,停止旧版本的容器,然后以新镜像启动容器。完成新版本发布。
  这里我想以dockerfile的方式做结合jenkins做一个简单的自动部署实验:
  首先po上大概的流程:
DSC0000.png

  1:开发人员发布新代码,上传至本地gitlab。
  2:jenkins开始构建,拉取新的代码,利用dockerfile把新代码传入docker,制作一个全新的镜像,上传至本地的docker私有仓库。
  3:项目服务器拉取新的镜像。
  4:关闭原有在运行的项目容器,使用新的镜像开启容器。项目发布完成
  实现:
  实验环境:
  jenkins:192.168.1.224
  docker宿主机:192.168.1.120
  发布前状态:
  这里我使用简单的一个web页面演示一个发布的流程,web容器使用的是resin。
  当前运行的docker容器信息如下:
DSC0001.png

  当前运行的web容器镜像为registry.cmh.cn/test:V2,容器名称为test_V2,容器内部的8080端口映射到宿主机的8080端口。
  当前的页面显示如下:(hello.txt充当本例要更新的代码部分)
DSC0002.png

  实验准备:
  1:配置docker私有仓库,安装jenkins。(不在本博客范畴)
  2:dockerfile,这里的dockerfile定制一个resin的images,具体配置和写法因人而异。
# more /opt/scripts/Dockerfile/resin/Dockerfile  
#create a images of resin environment..
  
FROM centos_java
  

  
MAINTAINER chenminghui "359275330@qq.com"
  

  
RUN echo 'RESIN_HOME=/opt/apps/resin' >> /etc/profile && echo 'PATH=$PATH:$JAVA_HOME/bin/:$JAVA_HOME/jre/bin/' >> /etc/profle && source /etc/profile
  
ENV JAVA_HOME=/opt/apps/jdk1.8.0_51/
  

  
#copy files to new images
  
ADD resin-pro-4.0.42.tar.gz /opt/apps/
  
RUN cd /opt/apps/resin-pro-4.0.42 && yum install -y gcc make.x86_64 openssl.x86_64 openssl-devel.x86_64  && ./configure --prefix=/opt/apps/resin  --libexecdir=/opt/apps/resin/libexec  --enable-jni --enable-64bit && make && make install
  
COPY pro.jar /opt/apps/resin/lib/
  
COPY gzlife-ad.sh /opt/scripts/resin.sh
  
COPY gzlife-ad.xml /opt/conf/resin/
  
COPY /webapps/hello.txt /opt/webapps/          ----------这里把更新的代码hello.txt,传入镜像的相关目录,供resin使用。
  
EXPOSE 8080
  
ENTRYPOINT sh /opt/scripts/resin.sh start && /bin/bash
  3:jenkins所需的构建脚本,这里的脚本相对简单,主要就是传入IP,项目,版本三个参数。进行拉取代码,制作镜像,上传镜像,远程拉取镜像以及启动容器等。(具体的脚本各位看官可自己写,这里只是做个简单的例子)
#more /opt/scripts/devops.sh  
#!/bin/sh
  
IP=$1
  
PROJECT=$2
  
VERSION=$3
  

  
echo "############git new code....#############"
  
cd /opt/scripts/Dockerfile/resin/webapps
  
git pull git@code.gzlife.cn:chenminghui/cmhtest.git
  

  
echo "#################build new images and push to private registry###########"
  
docker build -t registry.cmh.cn/test:${VERSION} /opt/scripts/Dockerfile/resin
  
docker push registry.cmh.cn/test:${VERSION}
  

  
echo "###########download new images and start new version of project##########"
  
ssh $IP "docker pull registry.cmh.cn/test:${VERSION}"
  
CONTAINER=`ssh $IP "docker ps | grep ${PROJECT}" | awk '{print $1}'`
  
ssh $IP "docker stop ${CONTAINER}"
  
ssh $IP "docker run -idt --name=${PROJECT}_${VERSION} -p 8080:8080 registry.cmh.cn/test:${VERSION}"
  4:jenkins新建一个构建工程,如下:(IP为web容器的ip,PROJECT为项目名称,VERSION为版本信息)
DSC0003.png

DSC0004.png

  以上准备好之后,就可以开始跑我们的构建流程了。
  部署新项目:
  1:更新hello.txt,push新代码至gitlab。
DSC0005.png

  2:jenkins填写相关参数,开始构建:
DSC0006.png

  3:静静等待构建完成:(可以看看构建信息)
DSC0007.png

  构建如果没有报错,则可以看到SUCCESS的结构,说明构建部署完毕。
  4:查看页面:
DSC0008.png

  可以看到新的代码已经生效。
  5:查看容器运行状态
DSC0009.png

  可以看到运行了新的容器,名字为test_V3,镜像使用的是registry.cmh.cn/test:V3。旧版本容器test_V2被关闭。
  如果发布的新版本有异常,可以停止test_V3,启动test_V2。这样就可以迅速实现版本的回退。
  后记:
  该例子只是一个简单的实践,生产环境肯定要复杂的多,要根据具体项目制定不同的部署步骤和需求。但是这个例子可以提供一个简单的思路给大家参考。
  该例子适用于针对单一的web部署的环境。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-562298-1-1.html 上篇帖子: jenkins2.6发布tomcat项目 下篇帖子: Jenkins + Github持续集成构建Docker容器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表