jenkins+docker的简单项目部署
怎么使用docker实现新项目的发布,一般有两种方式,以一个web容器为例:
1:定制一个通用的web容器镜像,以逻辑卷-v的方式,关联webapp目录到宿主机,每次发布新版本时只需要更新宿主机上关联目录的项目包(例如war包),然后重启web的相关docker容器。完成新版本发布。
2:以dockerfile的方式,每次发布新版本时,把相应的程序包传入dockerfile,一起打包成一个新的web容器镜像,停止旧版本的容器,然后以新镜像启动容器。完成新版本发布。
这里我想以dockerfile的方式做结合jenkins做一个简单的自动部署实验:
首先po上大概的流程:
1:开发人员发布新代码,上传至本地gitlab。
2:jenkins开始构建,拉取新的代码,利用dockerfile把新代码传入docker,制作一个全新的镜像,上传至本地的docker私有仓库。
3:项目服务器拉取新的镜像。
4:关闭原有在运行的项目容器,使用新的镜像开启容器。项目发布完成
实现:
实验环境:
jenkins:192.168.1.224
docker宿主机:192.168.1.120
发布前状态:
这里我使用简单的一个web页面演示一个发布的流程,web容器使用的是resin。
当前运行的docker容器信息如下:
当前运行的web容器镜像为registry.cmh.cn/test:V2,容器名称为test_V2,容器内部的8080端口映射到宿主机的8080端口。
当前的页面显示如下:(hello.txt充当本例要更新的代码部分)
实验准备:
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为版本信息)
以上准备好之后,就可以开始跑我们的构建流程了。
部署新项目:
1:更新hello.txt,push新代码至gitlab。
2:jenkins填写相关参数,开始构建:
3:静静等待构建完成:(可以看看构建信息)
构建如果没有报错,则可以看到SUCCESS的结构,说明构建部署完毕。
4:查看页面:
可以看到新的代码已经生效。
5:查看容器运行状态
可以看到运行了新的容器,名字为test_V3,镜像使用的是registry.cmh.cn/test:V3。旧版本容器test_V2被关闭。
如果发布的新版本有异常,可以停止test_V3,启动test_V2。这样就可以迅速实现版本的回退。
该例子只是一个简单的实践,生产环境肯定要复杂的多,要根据具体项目制定不同的部署步骤和需求。但是这个例子可以提供一个简单的思路给大家参考。
jenkins+docker的简单项目部署相关推荐
- Jenkins+Docker+Spring+Java项目持续集成(单机版)
1.大致流程 流程说明: 1)开发人员每天把代码提交到 Gitlab 代码仓库 2)Jenkins 从 Gitlab 中拉取项目源码,编译并打成jar包,然后构建成 Docker 镜像,将镜像上传到 ...
- 使用Docker+Jenkins+Pipeline将Vue项目部署到Nginx服务器
安装Docke 不知道怎么安装Docker可以看我之前的博文:使用Jenkins+Pipeline+Docker将Spring Boot应用部署到Tomcat 安装Jenkins 这里安装Jenkin ...
- Asp.net Core Jenkins Docker 实现一键化部署
写在前面 在前段时间尝试过用Jenkins来进行asp.net core 程序在IIS上面的自动部署.大概的流程是Jenkins从git上获取代码 最开始Jenkins是放在Ubuntu的Docker ...
- docker——网络及项目部署
docker网络 理解docker0 将之前学习的镜像全部删除,查看一下ip,发现基础的网卡有三个,分别如下 [root@izbp1bc82otjd8cslsu9zsz ~]# ip attr Obj ...
- springBoot的shiro的简单项目部署
springboot2.0框架下使用Shiro 介绍 Shiro是Apache旗下的开源项目,是一个简单易用的安全框架,提供包括认证.授权.加密.会话管理等诸多功能.Shiro使用了比较简单易懂易于使 ...
- 使用Docker安装Gitlab,Jenkins,Tomcat搭建流水线项目环境,实现DevOps自动化步骤,很详细
使用Docker安装Gitlab,Jenkins,Tomcat搭建流水线项目,实现DevOps自动化 写在前头,入职公司不久,发现公司都是用的Jenkins来实现自动化项目部署,十分方便,但作为底层开 ...
- 最新出炉 全网最牛最新的pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化测试【超详细】从0到封装
接口自动化测试框架(用例自动生成) 项目说明 本框架是一套基于pytest+requests+Python3.7+yaml+Allure+Jenkins+docker而设计的数据驱动接口自动化测试框架 ...
- Docker(十二):Docker+Jenkins+Nginx+Spring Boot 自动化部署项目
前言 虽然Docker已经是风靡全球的容器技术了,统一环境避免环境问题上是Docker的主要吸引点之一,但使用时详细还是会遇到不少问题的,比如个人搭建时曾思考过这些问题: Jenkins官网既然有Do ...
- Docker+Jenkins+Nginx+Spring Boot 自动化部署项目
Docker通过linux的namespace实现资源隔离.cgroups实现资源控制,通过写时复制机制(copy-on-write)实现了高效的文件操作,在实际开发中可用于提供一次性的环境.微服务架 ...
最新文章
- 求数组非连续子序列的最大和
- 格力电器Java面试题_JAVA设计模式学习--工厂模式
- Altium Designer之原理图
- 解读 SSDB、LevelDB 和 RocksDB 到 GaussDB(for Redis) 的迁移
- jquery 获取日期时间
- Call for Speaker!Flink Forward 全球在线会议议题征集 ing
- Delphi如何调用C++写的DLL
- OI国家集训队论文集1999~2018
- 全面解析Kmeans聚类算法(Python)
- SAR图像:拟合杂波时常用的分布
- python数学公式编辑工具_GNU TeXmacs
- 谈谈你对keep-alive的了解
- NVAPI抓屏传递给D3D11(D3D9到D3D11的数据传递)
- Centos添加开机启动项【Systemctl方式】
- 无需注册登录NVIDIA官网下载CUDNN
- QQ微信可以登录但打不开网页
- 毕设(一):正则化极限学习机(RELM)、在线学习的极限学习机(OS-ELM)、带遗忘机制的在线学习极限学习机(FOS-ELM)
- 【Linux】——Ubuntu18.04安装
- python常用功能_Python常用功能函数系列总结(七)
- k8s重启导致node没有成功连接:The connection to the server localhost:8080 was refused - did you specify the righ
热门文章
- Android 关于获取摄像头帧数据解码
- bzoj3110: [Zjoi2013]K大数查询 【树套树,标记永久化】
- Junit 3 与 Junit 4写法
- GNU make manual 翻译( 一百一十三)
- 悟空 CRM(9.0版本)V9.0_20190416 更新日志
- Vue SPA 打包优化实践
- ORACLE的直方图的一些试验
- List,Set,Collection,Collections比较
- JS小数位保留两位小数
- applicationContext.xml 的位置问题