jenkins+docker的简单项目部署

  • 时间:
  • 浏览:0

COPY gzlife-ad.xml /opt/conf/resin/

5

  首先po上为宜的流程:

COPY /webapps/hello.txt /opt/webapps/          ----------这里把更新的代码hello.txt,传入镜像的相关目录,供resin使用。

15

echo "############git new code....#############"

9

发布前清况 :

  该例子可是我一五个 简单的实践,生产环境肯定要冗杂的多,要根据具体项目制定不同的部署步骤和需求。并且你这人 例子都也能提供一五个 简单的思路给另一个人参考。

  docker宿主机:192.168.1.120

MAINTAINER chenminghui "359275330@qq.com"

  2:jenkins填写相关参数,并且开使构建:

11

7

FROM centos_java

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

 5:查看容器运行清况

12

3

1

3

10

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

2

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

  jenkins:192.168.1.224

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

本文转自 icenycmh 51CTO博客,原文链接:http://blog.51cto.com/icenycmh/1784735,如需转载请自行联系原作者

docker build -t registry.cmh.cn/test:${VERSION} /opt/scripts/Dockerfile/resin

  以上准备好并且,就都也能并且开使跑另一个人的构建流程了。

16

VERSION=$3

CONTAINER=`ssh $IP "docker ps | grep ${PROJECT}" awk '{print $1}'`

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

ENV JAVA_HOME=/opt/apps/jdk1.8.0_51/

18

  构建肯能这么报错,则都也能想看 SUCCESS的实物,说明构建部署完毕。

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

部署新项目:

7

ssh $IP "docker pull registry.cmh.cn/test:${VERSION}"

18

17

  1:定制一五个 通用的web容器镜像,以逻辑卷-v的法律依据,关联webapp目录到宿主机,每次发布新版本时只还要更新宿主机上关联目录的项目包(累似 war包),并且重启web的相关docker容器。完成新版本发布。

echo "###########download new images and start new version of project##########"

12

COPY gzlife-ad.sh /opt/scripts/resin.sh

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

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

实验准备:

6

echo "#################build new images and push to private registry###########"

16

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

1

8

cd /opt/scripts/Dockerfile/resin/webapps

11

4

9

  4:jenkins新建一五个 构建工程,如下:(IP为web容器的ip,PROJECT为项目名称,VERSION为版本信息)

ssh $IP "docker stop ${CONTAINER}"

14

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

5

6

#!/bin/sh

8

  2:以dockerfile的法律依据,每次发布新版本时,把相应的多线程池池 包传入dockerfile,同去打包成一五个 新的web容器镜像,停止旧版本的容器,并且以新镜像启动容器。完成新版本发布。

git pull git@code.gzlife.cn:chenminghui/cmhtest.git

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

10

15

ADD resin-pro-4.0.42.tar.gz /opt/apps/

13

19

后记:

这里我想以dockerfile的法律依据做结合jenkins做一五个 简单的自动部署实验:

13

4

ssh $IP "docker run -idt --name=${PROJECT}_${VERSION} -p 3030:3030 registry.cmh.cn/test:${VERSION}"

PROJECT=$2

ENTRYPOINT sh /opt/scripts/resin.sh start && /bin/bash

IP=$1

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

17

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

EXPOSE 3030

实验环境:

  肯能发布的新版本有异常,都也能停止test_V3,启动test_V2。这么 就都也能更慢实现版本的回退。

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

docker push registry.cmh.cn/test:${VERSION}

  4:查看页面:

14

  3:静静听候构建完成:(都也能看看构建信息)

2

  都也能想看 新的代码肯能生效。

实现:

COPY pro.jar /opt/apps/resin/lib/ 

  3:jenkins所需的构建脚本,这里的脚本相对简单,主要可是我传入IP,项目,版本一五个 参数。进行拉取代码,制作镜像,上传镜像,远程拉取镜像以及启动容器等。(具体的脚本各位看官可当时人写,这里可是我做个简单的例子)

为什么在么在使用docker实现新项目的发布,一般有并不是法律依据,以一五个 web容器为例:

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