jenkins+docker的简单项目部署

简介:

怎么使用docker实现新项目的发布,一般有两种方式,以一个web容器为例:

  1:定制一个通用的web容器镜像,以逻辑卷-v的方式,关联webapp目录到宿主机,每次发布新版本时只需要更新宿主机上关联目录的项目包(例如war包),然后重启web的相关docker容器。完成新版本发布。

  2:以dockerfile的方式,每次发布新版本时,把相应的程序包传入dockerfile,一起打包成一个新的web容器镜像,停止旧版本的容器,然后以新镜像启动容器。完成新版本发布。


这里我想以dockerfile的方式做结合jenkins做一个简单的自动部署实验:

  首先po上大概的流程:

wKioL1dM-0PhYV94AAByooLmLVU824.png

  1:开发人员发布新代码,上传至本地gitlab。

  2:jenkins开始构建,拉取新的代码,利用dockerfile把新代码传入docker,制作一个全新的镜像,上传至本地的docker私有仓库。

  3:项目服务器拉取新的镜像。

  4:关闭原有在运行的项目容器,使用新的镜像开启容器。项目发布完成


实现:

实验环境:

  jenkins:192.168.1.224

  docker宿主机:192.168.1.120

发布前状态:

  这里我使用简单的一个web页面演示一个发布的流程,web容器使用的是resin。

  当前运行的docker容器信息如下:

wKiom1dM--bQwYgYAAAdcg3JVcQ550.png

  当前运行的web容器镜像为registry.cmh.cn/test:V2,容器名称为test_V2,容器内部的8080端口映射到宿主机的8080端口。

  当前的页面显示如下:(hello.txt充当本例要更新的代码部分)

wKioL1dM_K_CRcPVAAAoAMKHuCg686.png


实验准备:

  1:配置docker私有仓库,安装jenkins。(不在本博客范畴)

  2:dockerfile,这里的dockerfile定制一个resin的images,具体配置和写法因人而异。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 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,项目,版本三个参数。进行拉取代码,制作镜像,上传镜像,远程拉取镜像以及启动容器等。(具体的脚本各位看官可自己写,这里只是做个简单的例子)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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为版本信息)

wKioL1dNANijG12sAABDvAbWzMc204.png


wKiom1dM_9zDx0AKAAAQUrBZP0A430.png

  以上准备好之后,就可以开始跑我们的构建流程了。


部署新项目:

  1:更新hello.txt,push新代码至gitlab。

wKioL1dNAfXCwgJtAACNaeaZz3s889.png

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

wKiom1dNAaSwoFB1AACCNtPIVLU160.png

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

wKiom1dNAhXAusuRAAAdDtSqLG8563.png

  构建如果没有报错,则可以看到SUCCESS的结构,说明构建部署完毕。

  4:查看页面:

wKiom1dNAnDx4lkeAAAqQ-vpCM0938.png

  可以看到新的代码已经生效。


 5:查看容器运行状态

wKioL1dNBV3AFgBJAAAp3TzeOUo943.png

  可以看到运行了新的容器,名字为test_V3,镜像使用的是registry.cmh.cn/test:V3。旧版本容器test_V2被关闭。

  如果发布的新版本有异常,可以停止test_V3,启动test_V2。这样就可以迅速实现版本的回退。


后记:

  该例子只是一个简单的实践,生产环境肯定要复杂的多,要根据具体项目制定不同的部署步骤和需求。但是这个例子可以提供一个简单的思路给大家参考。

  该例子适用于针对单一的web部署的环境。










本文转自 icenycmh 51CTO博客,原文链接:http://blog.51cto.com/icenycmh/1784735,如需转载请自行联系原作者
目录
相关文章
|
4月前
|
数据采集 存储 Docker
深入理解Docker:为你的爬虫项目提供隔离环境
本教程介绍如何使用Docker构建隔离环境,运行Python爬虫项目,采集小红书视频页面的简介和评论。主要内容包括: 1. **Docker隔离环境**:通过Docker容器化爬虫,确保环境独立、易于部署。 2. **代理IP技术**:利用亿牛云爬虫代理突破反爬限制。 3. **Cookie与User-Agent设置**:伪装请求头,模拟真实用户访问。 4. **多线程采集**:提高数据采集效率。 前置知识要求:Python基础、Docker基本操作及HTML解析(可选)。教程还涵盖常见错误解决方法和延伸练习,帮助你优化爬虫代码并避免陷阱。
135 7
深入理解Docker:为你的爬虫项目提供隔离环境
|
8月前
|
运维 网络安全 持续交付
IDEA+Docker 远程一键部署项目:技术干货分享
【10月更文挑战第4天】在现代软件开发中,快速、可靠、自动化的部署流程是提升开发效率和运维质量的关键。IDEA(IntelliJ IDEA)作为Java开发者首选的IDE,结合Docker这一轻量级容器化技术,能够实现远程一键部署项目,极大地简化了开发到生产的流程。今天,我将和大家分享这一组合在工作学习中的实际应用和技术干货。
694 3
|
3月前
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
318 0
|
10月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
6月前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
173 3
实战~如何组织一个多容器项目docker-compose
|
7月前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
1296 8
|
8月前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
1451 3
|
8月前
|
监控 jenkins 持续交付
Docker和Jenkins有什么不同
【10月更文挑战第18天】Docker和Jenkins有什么不同
|
8月前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
467 1
|
8月前
|
运维 jenkins 持续交付
自动化部署的魅力:如何用Jenkins和Docker简化运维工作
【10月更文挑战第7天】在现代软件开发周期中,快速且高效的部署是至关重要的。本文将引导你理解如何使用Jenkins和Docker实现自动化部署,从而简化运维流程。我们将从基础概念开始,逐步深入到实战操作,让你轻松掌握这一强大的工具组合。通过这篇文章,你将学会如何利用这些工具来提升你的工作效率,并减少人为错误的可能性。