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,具体配置和写法因人而异。

# more /opt/scripts/Dockerfile/resin/Dockerfile 
#create a images of resin environment..
FROM centos_java

MAINTAINER chenminghui "[email protected]"

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 [email protected]: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。这样就可以迅速实现版本的回退。

后记:

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

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

时间: 2024-11-08 18:29:07

jenkins+docker的简单项目部署的相关文章

node项目自动化部署--基于Jenkins,Docker,Github(3)自动化部署

GitHub仓库 由于现在的代码基本上都是多人合作开发,所以肯定会用到像 git 这样的版本控制工具 所以这里使用 GitHub 来做一个演示 首先我们需要在github上新建一个仓库 点击New来新建一个仓库 输入一个名字 以及描述后点击 create 然后将代码上传到GitHub上 这里我上传的是一个简单的 hello world 的demo 到这里要部署的代码就准备完成了,接下来需要编写 Dockerfile 来告诉 docker 该怎么打包我们的项目 Dockerfile编写 首先我们在

netcore3.1+jenkins+docker在ubantu中部署

最近由于疫情给了不少时间,之前断断续续做过很多关乎docker的学习,一直敲各种命令,觉得太麻烦了,没继续深入下去,这段时间又琢磨了一阵子,说一说遇到的一些问题,记录一下.ubantu是安装在台式机中的,总觉得虚拟机太麻烦,直接把台式机的机械硬盘电源线拔了,把系统安装到了120g的固态硬盘上,平时闲置的也算做了一些贡献,ubantu上有一些小游戏挺好玩,扯远了... 安装环境就不说了,总体思路就是代码传递到码云,由jenkins下载最新代码,执行dockerfile,运行容器.开始是做的jenk

Ubuntu中安装jenkins+docker,实现项目部署

本人对于linux系统是个小白,恰逢公司新框架需要docker+jenkins部署项目,所以通过同事口述+一顿乱查,终于实现在虚拟机上搭建的ubuntu系统中 实现jenkins +docker 自动部署拉取项目. 赶紧做个记录! 准备条件: 1.虚拟机内安装ubuntu随后再做记录,虽说同事已经演示过,但是自己还是得记录下. 2.jenkins 需要环境:由于本人直接将jenkins安装于宿主机中(还可以将jenkins安装于docker中---这个随后再研究,一步一步来),所以需要JDK+T

git+jenkins+docker+registry的CICD简单实现

背景 环境准备 部署 docker git repository registry jenkins 自动化CICD 基础镜像Dockerfile jenkins部署容器脚本 参考 实现服务容器化能极大提高CICD的效率,利用git+jenkins+docker+registry能提供一套比较简单的实现方案,如果对docker和jenkins比较熟悉,实现过程会非常简单. 背景 CICD,即持续集成持续部署,而jenkins就是一个持续集成工具.docker是容器,registry是容器镜像仓库.

Linux文档整理之【Jenkins+Docker自动化部署.Net Core】

这次整理的文档是Jenkins+Docker实现自动化部署,很早之前就写的,今天有时间就搬到博客园做个记录. Jenkins是基于Java开发的一种持续集成工具,主要用于持续.自动的构建/测试软件等相关项目.在Java开发中我们经常能看到使用jenkins来部署,.Net core目前还是比较少见的,但是好的东西我们就应该要拿来使用.借鉴. 1. 安装JenKins 这里使用Docker来安装JenKins,当然也可以直接安装到Linux中. 创建jenkins工作目录 mkdir /usr/l

jenkins+git+maven搭建自动化部署项目环境

简介    折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.com/jacky-        lulu/cxf_demo-Maven-Webapp)     系统:centos6.5 maven: Apache Maven 3.3.9 git:git version 2.0.0 1.首先安装git,看以前另外一篇博客 http://www.cnblogs.co

如何在jenkins上新建一个项目及其简单配置

1.首先,点击[新建]进入选择页面,如下图(一般选择"构建一个自由风格的软件项目")     2.填好项目名称后,点击ok,跳转至如下页面,可以在这个页面进行项目的配置(包括拉源码.修改持续构建时间.打包部署前修改配置文件等) 3.General中的"丢弃旧的构建"可以设定持续构建的 4.在"参数化构建过程"中可以设置要构建的版本有哪些,如下 5.在源码管理模块可以设置源码地址(我们公司一般用的Git) 6.如果是自动化构建,可以在构建触发器中的

Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目

前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+jenkins的持续集成环境,并构建了基于maven的项目.这一节,我们继续扩展功能,增加对Nodejs的支持,实现nodejs项目构建.并打包成docker镜像和自动部署. 1. 配置Nodejs环境 1.1 安装nodejs插件 打开系统管理——管理插件——可选插件,搜索NodeJS,选择NodeJS Plugin安装 1.2 配置nodejs 版本 系统管理 —— 全局工具配置 —— NodeJ

Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践)

转载:http://www.cnblogs.com/EasonJim/p/6295372.html Jenkins使用FTP进行一键部署及回滚2(Windows)(项目实践) 前提: 这一篇是继上一篇http://www.cnblogs.com/EasonJim/p/6092938.html的真实项目实践. 思路和大致实现步骤请参照上一篇文章. 注意:这篇文章涉及到两台服务器:1为测试服务器.2为正式服务器.且,两台服务器都必须安装了jenkins. 注意2:这里所说的一键部署是指从测试服务器到