原文地址:http://blog.51cto.com/dadonggg/1957691

本篇实操性的案例讲解——JAVA项目如何通过Docker实现持续部署(只需简单四步),

即:开发通过git push上传代码,经Git和Jenkins配合,自动完成程序部署、发布,全程无需运维人员参与。

这是一种真正的容器级的实现,这个带来的好处,不仅仅是效率的提升,更是一种变革:

开发人员第一次真正为自己的代码负责——终于可以跳过运维和测试部门,自主维护运行环境(首先是测试/开发环境)。

难者不会,会者不难。通过简单的4个配置,即可优雅地实现持续部署。本文依惯例放上目录,请享用。

  1. 持续部署的技术思路

  2. 效果展示

  3. 配置Git和Jenkins联动

  4. 配置Jenkins自动更新代码

  5. 效果图文详解

  6. FAQ

好吧,我们正式开始。

1. 持续部署的技术思路

在本例中,假设我们JAVA项目的名称为hello。简要的技术思路如下。

本案例中假设代码托管在git.oschina.com上,Jenkins和Docker Registry(类似于yum源)各运行在一个Docker容器中。JAVA项目自己也单独运行在一个叫hello的容器中。

本文采取的持续部署方案,是从私有的Docker Reistry拉取代码。有些变通的方案,把代码放在宿主机上,让容器通过卷组映射来读取。这种方法不建议的原因是,将代码拆分出容器,这违背了Docker的集装箱原则:

这也导致装卸复杂度增加。从货运工人角度考虑,整体才是最经济的。这样,也才能实现真正意义的容器级迁移。

或者说,容器时代,抛弃过去文件分发的思想,才是正途。本文最后的问答环节对此有更多阐述。

容器即进程。我们采用上述方案做Docker持续部署的原因和意义,也在于此。容器的生命周期,应该远远短于虚拟机,容器出现问题,应该是立即杀掉,而不是试图恢复。

2. 效果展示

本文最后实现的效果,究竟有多惊艳呢?且看如下的演示。

2.1 程序代码更新前的效果

我们以时间戳来简洁、显式的表述程序更新情况。

2.2 提交程序代码更新

本例中,我们把首页的时间戳从201506181750,修改为201506191410(见如下)。

2.3 上传新代码到Git

顺序执行如下操作,输入正确的git账号密码。

然后呢?

然后什么都不用做了。端杯茶(如果不喜欢咖啡的话),静静地等待自动部署的发生, 旁观一系列被自动触发的过程,机器人似的运转起来(请容稍候再加以描述)。

为什么需要3~5分钟?只是因为本案例中的JAVA项目,需要从国外download Maven程序包,以供Jenkins调用和编译JAVA。正式应用环境中,可以把Maven源放在国内或机房。如果仅仅需要对PHP项目做持续部署,那就更快捷了。

2.4 查看代码更新后的效果

在静静地等待几分钟后,新的代码确实已经自动部署完毕。

那么,这一切怎么实现的呢?很复杂么?不然。只要按照如下几步,便可快速实现哦。

3. 配置Git和Jenkins联动

这个过程也是难者不会,会者不难。主要分为如下三步。

3.1 Jenkins配置Git源

Jenkins中新建项目java-app,并配置从Git拉取程序代码。具体如下:

3.2 Jenkins配置远程构建

Jenkins中配置token,以供git远程调用时使用。

3.3 Git开启钩子

怎么让Git在接收到用户更新的代码后,把消息和任务传递给Jenkins呢?这借助于Git的hook功能,配置起来也非常简单,如下。

4. 配置Jenkins自动更新代码

Jekins在接收到Git传递过来的消息后,再触发一个远程构建(到目标服务器),按照预定义的任务列表,执行一系列的工作,重建容器等。详见如下:

我们把其中最关键的Shell脚本内容摘抄出来。

5. 效果图文详解

在2.3这个章节中,我们当时的操作如下,这个目的是向Git提交更新代码。

当时并没有细说后续发生的事情,既然上面已经说清楚了原理,那我们就可以接下来说说实际发生的事情啦。

5.1 上传代码到Git

这里貌似整个过程已经完成并顺利退出。其实,后台的工作才刚刚开始哦。

这时会触发Git服务器向相应的Jenkins服务器发出一个操作请求,此工作太过迅速,也没啥好说的,我们接下来看Jenkins都干啥子了。

5.2 Jenkins进行的精彩互动

1)Jenkins会自动冒出来一个构建任务。

2)我们点进来,看看具体操作日志。是的,正在接受来自Git的任务。

3)下载Maven相关的软件包(就是这个过程慢)。

4)下载完成后,就开始利用maven BUILD 新的hello项目包。

5)然后重建Maven容器,构建新的Image并Push到Docker私有库中。

6)最后,重新把Docker容器拉起来。这样,又新生了。呵呵

JAVA项目如何通过Docker实现Jenkins持续部署的更多相关文章

  1. Jenkins持续部署

    Jenkins持续部署 Jenkins提供很好的连续部署和交付的支持.看一下部署任何软件开发的流程,将如下图所示. 连续部署的主要部分,是确保其上面所示的整个过程是自动化的.Jenkins实现所有这些 ...

  2. Jenkins持续部署-自动生成版本号

    目录 Jenkins持续部署-自动生成版本号 目录 前言 目的 详细流程 获取SVN Reversion 获取需求号 设置编译前读取版本号 总结 参考文献 Jenkins持续部署-自动生成版本号 目录 ...

  3. docker安装jenkins自动化部署

    Docker之Jenkins自动化部署 1.拉取jenkins镜像images(类比:java中的类) docker pull jenkinsci/jenkins:lts 或 docker pull ...

  4. Docker 之 Jenkins自动化部署

    Docker 之 Jenkins自动化部署 Jenkins部署 jenkis 绑定gitlab shell脚本自动化构建Docker镜像 提升maven构建速度 jenkins 无法通过shell脚本 ...

  5. Jenkins持续部署-Windows环境持续部署探究1

    目录 Jenkins持续部署-Windows环境持续部署探究1 目录 前言 目的 方案流程 技术实现 PowerShell FTP上传插件 环境变量插件 脚本执行 远程调用 升级服务 启动服务 总结 ...

  6. Jenkins持续部署-创建差量更新包

    目录 Jenkins持续部署-创建差量更新包 目录 前言 目的 详细流程 生成版本号 获取版本号 创建文件更新清单 压缩 获取上个版本的包 创建差量更新包 读取服务器Json配置 远程创建文件夹目录 ...

  7. Docker + Jenkins 持续部署 ASP.NET Core 项目

    Docker 是个好东西,特别是用它来部署 ASP.NET Core Web 项目的时候,但是仅仅的让程序运行起来远远不能满足我的需求,如果能够像 DaoCloud 提供的持续集成服务那样,检测 gi ...

  8. 将java项目打包成docker镜像

    简介:将jar打包成镜像好说,毕竟jar包长的都是一样的,但是我们只是写了一个普通的java项目,我也不方便封装成jar包什么的,但是我们也想打包docker image怎么办呢,我们可以用编译后的j ...

  9. 将java项目打包成docker镜像:镜像=副本

    简介:将jar打包成镜像好说,毕竟jar包长的都是一样的,但是我们只是写了一个普通的java项目,我也不方便封装成jar包什么的,但是我们也想打包docker image怎么办呢,我们可以用编译后的j ...

随机推荐

  1. 微信、支付宝App支付-JPay0.0.2发布

    JPay 对微信App支付.支付宝App支付的二次封装,对外提供一个相对简单的接口以及支付结果的回调 GitHub:https://github.com/Javen205/JPay OsChina:h ...

  2. Android 如何预置APK M

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  3. thick置备和 thin置备,克隆,模板和快照

    共享shared VMDK和共享RDM实验,参见http://wenku.it168.com/d_000773128.shtml 假如你有一个磁盘是100G的虚拟机,磁盘格式是厚置备,即Thick,当 ...

  4. 调用OpenCVSharp进行拍照

    一.核心代码: using OpenCvSharp; using System; using System.Collections.Generic; using System.IO; using Sy ...

  5. JAVA 数据库连接池(伪代码,简单易读)

    一.引言 近年来,随着 Internet/Intranet 建网技术的飞速发展和在世界范围内的迅速普及,电子商务的冲击波又一次在世界范围内掀起巨浪,各类商务网站吸引着大量用户的青睐,商务网站的访问量也 ...

  6. console.time 简单分析javascript动态加入Dom节点的性能

    Bullshit 本来想每天都更新下博客的,可是近期要考试,还有就是自己还是停留在暗自窃喜中吧(这样的想法要改变). 事实上近期总在想.自己要怎么去管理自己的数据,每天的生活都是对自己的数据的增删查改 ...

  7. 转 PHP常用正则表达式汇总

    1.    平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: 2.    "^\d+$" //非负整数(正整数 + 0) 3.    "^[0 ...

  8. Python学习摘录(上)

    1:接收输入 var=raw_input() 注意:raw_input()总数接收字符串形式的输入.所以,如果我们想接收其他类型的数据,则需要强制类型转换.(如果转换失败,就会抛出异常) 2:pass ...

  9. 解决ODI 12C Studio 运行缓慢问题

    一.配置 ODI 12C Studio 1.1 修改ODI Studio process的-Xms和-Xmx ide.conf: modifying the initial Heap size (-X ...

  10. idea 配置svn

        1.情景展示 idea安装好后,如何配置svn? 2.分析 由于没有针对idea的svn插件,因此只能选择安装svn的客户端. 3.解决方案 第一步:下载小乌龟SVN客户端: 官网地址:htt ...