敏捷Agile方法

持续交付的的概念和工具介绍

  本文主要介绍Continuous Delivery持续交付中涉及的一些开源工具,介绍它们不同的使用方法,并进行比较,覆盖从持续集成实现、持续交付到部署的所需每个步骤。

Martin Fowler认为: 持续交付是一种软件开发纪律,以某种方式构建软件,这种方式能够在任何时候都可以将软件发布到生产环境。

持续交付的特点:

  1. 你的软件在整个生命周期都是可部署的。
  2. 您的团队总是将优先部署先于新功能开发。
  3. 随时有人会根据自动反馈快速更改其系统,并发布到生产环境。
  4. 您可以通过一键式部署将任何版本的软件部署到任何环境中。

持续部署、 持续交付和持续集成的区别:

  • 持续部署是每次更改都通过管道和自动手段投入生产,每天都有很多产品部署。
  • 持续交付意味着你能频繁部署但是可以不这样做,通常因为业务因素更愿意选择一种低速率的部署,为了能持续部署,你首先必须实现持续交付。
  • 持续集成是指在部署环节集成 构建和测试代码,持续交付基于此之上,为产品部署的最后阶段而准备。

上面三个环节都是彼此依赖,为了持续部署必须能够做到持续集成和交付。

下面谈谈哪些自动工具帮助我们实现。为了能够成功有效率地实现持续交付,建议采取新的工具,这种工具的采用是根据开发过程和流程来选择的。通用的选择有CI工具如Jenkins, Hudson, Travis 和 Bamboo. 它们背后基本原理都是探测到代码仓库变化然后自动触发一系列工作和任务。

 

Jenkins 和Hudson

  两者分享相同的基础代码,许多特性非常相似,但不相同,两者都容易扩展 强劲且是免费,它们主要优点是有许多插件和社区支持。

  Jenkins/Hudson 易于被扩展,其缺点是基于插件的构架会有稳定性方面的消耗,插件质量不同,在更新插件时,有可能会中断当前任务或抛出错误。灵活性是两者重要的特点。

  两者区别是,在2011年, Jenkins从Hudson分支而出继续作为一个开源项目. 这种分离是由Hudson创建者Kohsuke Kawaguchi做出的,.Hudson在2012以后在Oracle工作,后来正式将Hudson移交给Eclipse基金会。

  Hudson是更加面向企业组织用户,对代码的清晰干净 稳定性和性能更加注重,另外一方面Jenkins更加被社区用户接受,更充满生机和活力. 更加有专业性(commits, 代码新行数, plugins…), Jenkins是超过了Hudson.

  Jenkins可能是最流行的CI工具,因此,寻求帮助或用户都是很容易。

 

Bamboo

  Bamboo是Atlassian的产品. 与Jenkins相比, Bamboo非常性感. 它易于使用看上去更好些。可用性是其与众不多的首要特点,此外,与其旗下产品有良好的集成性。

  主要缺点是其价格和扩展性,它不是免费工具。

 

Travis

  Travis是非常简单,不像Jenkins可以允许无限多的插件、有无数个工作任务创建和复杂的流程等等, Travis 基于一个简单文件.travis.ylm,它驻留在你的代码根目录,即使这个配置文件变得复杂,大部分情况下Travis总是假设我们根据标准来实行,因为标准和简单意味着更好更有效的设计。

  Travis大多数时候无需显式定义流程,举例,如果有build.gradle 文件, Travis会理解它并使用Gradle编译它,测试等等,它会侦查你的代码并采取相应动作,如果从Ant切换到Maven 再到Gradle,无需对Travis或其配置做任何改变。

  Travis对GIT有很强的依赖性, 因此如果你使用其他版本控制系统, Travis就不是一个好的选择了,如果你使用GIT,那么与Travis一起工作,会让你忘记CI的存在. 无论什么时候将代码提交到仓库, Travis会发现并采取相应代码改变(包括 .travis.ylm). 如果有问题,你会收到Email通知。

  让CI 配置(.travis.ylm) 作为代码集成的一部分会带来好处,通过配置你告诉它应该做什么它就会去实现。 简单带来一点问题,当复杂非标准的需求出现时, Travis就难以应付了。