Jenkins 2.0新时代:从CI到CD

2.0 破茧重生

自从去年9月底Jenkins的创始人Kohsuke Kawaguchi提出Jenkins 2.0(后称2.0)的愿景和草案之后,整个Jenkins社区为之欢欣鼓舞,不管是官方博客还是Google论坛,大家都在热烈讨论和期盼2.0的到来。4月20日,历经Alpha(2/29),Beta(3/24),RC(4/7)3个版本的迭代,2.0终于正式发布。这也是Jenkins面世11年以来(算上前身Hudson)的首次大版本升级。那么,这次升级具体包含了哪些内容呢?

外部

从外部来看,2.0最大的三个卖点分别是Pipeline as Code,全新的开箱体验和1.x兼容性。

Pipeline as Code是2.0的精髓所在,是帮助Jenkins实现CI(Continuous Integration)到CD(Continuous Delivery)华丽转身的关键推手。所谓Pipeline,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程(例如下图)。Pipeline的实现方式是一套Groovy
DSL(类似Gradle),任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。

全新的开箱体验力图扭转我们印象中Jenkins十年不变的呆滞界面风格,不光Jenkins应用本身,官网排版、博客样式乃至域名都被重新设计。这些变化除了极大的改善了用户体验,更重要的是给人们传达一个清晰的信号,Jenkins不再仅仅是一个CI工具,而是蕴含着无限可能。

1.x兼容性给所有老版本用户吃了一颗大大的定心丸,注意,是完全兼容哦。

内部

从内部来看,2.0主要包含了一些组件升级和JS模块化改造。

  • 升级Servlet版本到3.1,获取Web Sockets支持
  • 升级内嵌的Groovy版本到2.4.6
  • 提供一个简化的JS类库给Plugin开发者使用
更好的容器化支持

随着容器化技术(以Docker为代表)的不断升温,Jenkins紧随潮流,不仅同步上传2.0的Docker镜像,同时也在Pipeline中提供了默认的Docker支持

除了上述内容,2.0还有一个比较有意思的改动,全局重命名Slave为Agent,看来在美国做IT政治正确性也是很重要啊。

Pipeline as Code

了解了2.0的概貌之后,回过来我们再看一下Pipeline as Code(后称Pipeline)产生的背景和具体构成。

产生背景

作为2.0的核心插件,Pipeline并不是一个新事物,它的前身是Workflow Plugin,而Workflow的诞生是受更早的Build
Flow Plugin
启发,由Nicolas De Loof于2012年4月发布第一个版本。而纵观Jenkins的几个竞争对手(Travis
CI
phpcicircleci),Pipeline早已不是什么新鲜概念。可以说这次Jenkins
2.0的发布是顺势而为,同时也是大势所趋。

如果要在更大范围探讨Pipelined的产生背景,我认为有三个层面的原因。

  • 第一层面,与不断增长的发布复杂度有关,其中一个典型场景就是灰度发布。原本只有大公司才有的灰度发布,随着敏捷开发实践的广泛采用、产品迭代周期的不断缩短、数据增长理念的深入人心,越来越多的中小公司也开始这一方面的探索,这对发布的需求也从点状的CI升级到线状的CD。这是Pipeline产生的第一个原因。
  • 第二层面,与应用架构的模块化演变有关,以微服务为代表,一次应用升级往往涉及到多个模块的协同发布,单个CI显然无法满足此类需求。这是Pipeline产生的第二个原因。
  • 第三层面,与日益失控的CI数量有关。一方面,类似于Maven、pip、RubyGems这样的包管理工具使得有CI需求的应用呈爆发性增长,另一方面,受益于便捷的Git分支特性,即便对于同一个应用,往往也需要配置多个CI。随着CI数量的不断增长,集中式的任务配置就会成为一个瓶颈,这就需要把任务配置的职责下放到应用团队。这是Pipeline(as Code)产生的第三个原因。
具体构成

说完背景,再看一下Pipeline的具体构成和特性。

基本概念:

  • Stage: 一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。注意,Stage是一个逻辑分组的概念,可以跨多个Node。
  • Node: 一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行期环境。
  • Step: Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenkins Plugin提供。

具体构成:

  • Jenkinsfile: Pipeline的定义文件,由Stage,Node,Step组成,一般存放于代码库根目录下。
  • Stage View: Pipeline的视觉展现,类似于下图。

2.0默认支持三种类型的Pipeline,普通Pipeline,Multibranch Pipeline和Organization Folders,后两种其实是批量创建一组普通Pipeline的快捷方式,分别对应于多分支的应用和多应用的大型组织。注意,要获取Organization Folders的支持需要额外安装Plugin。

值得一提的是,2.0有两个很重要的特性:

  • Pausable: 类似于Bash的read命令,2.0允许暂停发布流程,等待人工确认后再继续,这个特性对于保证应用HA尤为重要。

  • Durable: 发布过程中,如果Jenkins挂掉,正在运行中的Pipeline并不会受影响,也就是说Pipeline的进程独立于Jenkins进程本身。
示例Pipeline

上文所涉及的示例Pipeline可以在我的GitHub找到,如果有问题想跟我探讨,可以加我QQ: 7789059。

参考

2.0 破茧重生

自从去年9月底Jenkins的创始人Kohsuke Kawaguchi提出Jenkins 2.0(后称2.0)的愿景草案之后,整个Jenkins社区为之欢欣鼓舞,不管是官方博客还是Google论坛,大家都在热烈讨论和期盼2.0的到来。4月20日,历经Alpha(2/29),Beta(3/24),RC(4/7)3个版本的迭代,2.0终于正式发布。这也是Jenkins面世11年以来(算上前身Hudson)的首次大版本升级。那么,这次升级具体包含了哪些内容呢?

外部

从外部来看,2.0最大的三个卖点分别是Pipeline as Code,全新的开箱体验和1.x兼容性。

Pipeline as Code是2.0的精髓所在,是帮助Jenkins实现CI(Continuous Integration)到CD(Continuous Delivery)华丽转身的关键推手。所谓Pipeline,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程(例如下图)。Pipeline的实现方式是一套Groovy DSL(类似Gradle),任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline
as Code的理念。

全新的开箱体验力图扭转我们印象中Jenkins十年不变的呆滞界面风格,不光Jenkins应用本身,官网排版、博客样式乃至域名都被重新设计。这些变化除了极大的改善了用户体验,更重要的是给人们传达一个清晰的信号,Jenkins不再仅仅是一个CI工具,而是蕴含着无限可能。

1.x兼容性给所有老版本用户吃了一颗大大的定心丸,注意,是完全兼容哦。

内部

从内部来看,2.0主要包含了一些组件升级和JS模块化改造。

  • 升级Servlet版本到3.1,获取Web Sockets支持
  • 升级内嵌的Groovy版本到2.4.6
  • 提供一个简化的JS类库给Plugin开发者使用
更好的容器化支持

随着容器化技术(以Docker为代表)的不断升温,Jenkins紧随潮流,不仅同步上传2.0的Docker镜像,同时也在Pipeline中提供了默认的Docker支持

除了上述内容,2.0还有一个比较有意思的改动,全局重命名Slave为Agent,看来在美国做IT政治正确性也是很重要啊。

Pipeline as Code

了解了2.0的概貌之后,回过来我们再看一下Pipeline as Code(后称Pipeline)产生的背景和具体构成。

产生背景

作为2.0的核心插件,Pipeline并不是一个新事物,它的前身是Workflow Plugin,而Workflow的诞生是受更早的Build
Flow Plugin
启发,由Nicolas De Loof于2012年4月发布第一个版本。而纵观Jenkins的几个竞争对手(Travis
CI
phpcicircleci),Pipeline早已不是什么新鲜概念。可以说这次Jenkins
2.0的发布是顺势而为,同时也是大势所趋。

如果要在更大范围探讨Pipelined的产生背景,我认为有三个层面的原因。

  • 第一层面,与不断增长的发布复杂度有关,其中一个典型场景就是灰度发布。原本只有大公司才有的灰度发布,随着敏捷开发实践的广泛采用、产品迭代周期的不断缩短、数据增长理念的深入人心,越来越多的中小公司也开始这一方面的探索,这对发布的需求也从点状的CI升级到线状的CD。这是Pipeline产生的第一个原因。
  • 第二层面,与应用架构的模块化演变有关,以微服务为代表,一次应用升级往往涉及到多个模块的协同发布,单个CI显然无法满足此类需求。这是Pipeline产生的第二个原因。
  • 第三层面,与日益失控的CI数量有关。一方面,类似于Maven、pip、RubyGems这样的包管理工具使得有CI需求的应用呈爆发性增长,另一方面,受益于便捷的Git分支特性,即便对于同一个应用,往往也需要配置多个CI。随着CI数量的不断增长,集中式的任务配置就会成为一个瓶颈,这就需要把任务配置的职责下放到应用团队。这是Pipeline(as Code)产生的第三个原因。
具体构成

说完背景,再看一下Pipeline的具体构成和特性。

基本概念:

  • Stage: 一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。注意,Stage是一个逻辑分组的概念,可以跨多个Node。
  • Node: 一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行期环境。
  • Step: Step是最基本的操作单元,小到创建一个目录,大到构建一个Docker镜像,由各类Jenkins Plugin提供。

具体构成:

  • Jenkinsfile: Pipeline的定义文件,由Stage,Node,Step组成,一般存放于代码库根目录下。
  • Stage View: Pipeline的视觉展现,类似于下图。

2.0默认支持三种类型的Pipeline,普通Pipeline,Multibranch Pipeline和Organization Folders,后两种其实是批量创建一组普通Pipeline的快捷方式,分别对应于多分支的应用和多应用的大型组织。注意,要获取Organization Folders的支持需要额外安装Plugin。

值得一提的是,2.0有两个很重要的特性:

  • Pausable: 类似于Bash的read命令,2.0允许暂停发布流程,等待人工确认后再继续,这个特性对于保证应用HA尤为重要。

  • Durable: 发布过程中,如果Jenkins挂掉,正在运行中的Pipeline并不会受影响,也就是说Pipeline的进程独立于Jenkins进程本身。

时间: 2024-10-03 20:59:54

Jenkins 2.0新时代:从CI到CD的相关文章

【Jenkins】2.0新时代:从CI到CD

2.0 破茧重生 自从去年9月底Jenkins的创始人Kohsuke Kawaguchi提出Jenkins 2.0(后称2.0)的愿景和草案之后,整个Jenkins社区为之欢欣鼓舞,不管是官方博客还是Google论坛,大家都在热烈讨论和期盼2.0的到来.4月20日,历经Alpha(2/29),Beta(3/24),RC(4/7)3个版本的迭代,2.0终于正式发布.这也是Jenkins面世11年以来(算上前身Hudson)的首次大版本升级.那么,这次升级具体包含了哪些内容呢? 外部 从外部来看,2

欢迎你,企业架构CCIE,RS CCIEv5.0的升级版新时代迎合自动化运维的网工顶级认证

欢迎你,企业架构CCIE,作者乾颐堂安德 或许,这就是能力!想起一句电影台词,"股票是什么,股票是人类对未来的预测,预测对了你就是赢家,预测错了你就是输家",没错预测就是一种能力,2019年6月10日下午乾颐堂茶话会公开课,名字为"思科一出,谁与争锋!",其中的小道消息主要概括为"思科将发布新的CCIE,时间为2020年2月",果然在今天思科就发布了Glance,这个发布时间这么紧凑倒是我没想到的.好了,让我们来看看企业架构CCIE的不同吧,这是

Spark1.0.0新特性

Spark1.0.0 release于2014-05-30日正式公布,标志Spark正式进入1.X的时代.Spark1.0.0带来了各种新的特性,并提供了更好的API支持:Spark1.0.0添加了Spark SQL这一个新的重要组件,用于载入和操作Spark的结构化数据:Spark1.0.0增强了现有的标准库(ML,streaming,GraphX),同一时候还增强了Java和Python语言的支持:最后,Spark1.0.0在运维上做了非常大的改进,包含支持Hadoop/YARN安全机制.使

Jenkins 2.0 要来了

Jenkins 在2016/02/29日发布了2.0 alpha版本,https://jenkins-ci.org/2.0/ , 改进界面,向前兼容,增加新功能: 1.初始化时可以选择推荐插件或自定义插件 2.可以用Groovy代码定义流程 3.并且每个步骤是可视的: 当然还有更多新功能要添加,可以在这里查到:https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+2.0 本来想下载体验一下,结果每次jenkins初始化时都是空白,可能是网络有问题

众筹格局初定,迈向3.0场景时代

互联网金融发展到了今天,正在形成几大主流业务形态,包括第三方支付.互联网理财.消费金融.以及众筹等.在这几大业务之中,众筹起步比较晚,但是发展速度却非常迅猛.在全民创业的浪潮下,众筹成为了中小企业尤其是初创团队融资的最有效途径.众筹经历了去年的爆发式增长,随着京东.阿里等巨头的涌入,国内的众筹市场也经历了连番洗牌,正在迈向新的时代. 众筹1.0时代——垂直类众筹网站萌芽 在众筹刚刚兴起的时候,国内涌现了许多的垂直类众筹平台,其中主要以两类为主.一类集中在出售产品.公益活动.门票等方面,其模式为预

MEAN实践——LAMP的新时代替代方案(下)

[编者按]在九十年代,Linux+Apache+Mysql+PHP 架构曾风靡一时,直到现在仍然是众多 Web 应用程序的基本架构.然而随着需求的变迁和数据流量的激增,LAMP 已不可避免的走下神坛.近日,在 MongoDB Blog 中,Dana Groce 介绍了一个基于新时代架构的实践——MEAN,MongoDB/Mongoose.js.Express.js.Angular.js 和 Node.js.本文系 OneAPM 工程师编译整理: MEAN实践——LAMP的新时代替代方案(上) 在

iOS开发——新特性OC篇&Swift 2.0新特性

Swift 2.0新特性 转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上Apple发布了Swift 2.0,引入了很多新的特性,以帮助开发者能更快,更简单的构建应用.我在这里也说道说道Swift 2.0中值得大家注意的新特性. guard语句 guard语句和if语句有点类似,都是根据其关键字之后的表达式的布尔值决定下一步执行什么.但与if语句不

MEAN实践——LAMP的新时代替代方案(上)

[编者按]在九十年代,Linux+Apache+Mysql+PHP 架构曾风靡一时,直到现在仍然是众多 Web 应用程序的基本架构.然而随着需求的变迁和数据流量的激增,LAMP 已不可避免的走下神坛.近日,在 MongoDB Blog 中,Dana Groce 介绍了一个基于新时代架构的实践——MEAN,MongoDB/Mongoose.js.Express.js.Angular.js 和 Node.js.本文系 OneAPM 工程师编译整理: 本系列博客的两篇文章主要关注 MEAN 技术堆栈的

闪存逐鹿——NVMe引领闪存新时代

闪存逐鹿--NVMe引领闪存新时代 大数据时代迅即降临,传统的旋转式磁盘在性能.容量等多方面捉襟见肘.闪存在IOPS.延迟及带宽三大性能指标上的绝对优势使之倍受青睐,迅速取代硬盘成为不可或缺的存储介质.2013年是闪存规模化进入数据中心的一年,因而成为载入史册的"闪存元年".过去一年的飞速发展中,闪存在数据中心中担任的角色越来越多样化,从服务器中的PCIe闪存卡.存储阵列中最适合存放热数据的全闪存阵列.适合分层存储的混合阵列,再到RAID卡中的掉电保护闪存模块等等不一而足. 展望未来,