工欲善其事,必先利其器

说起持续集成,不得不讲Jenkins了。但苦思良久,才落笔开始写:

  • Jenkins的内容太丰富了,各种小技巧,插件,配置,层出不穷,难以计数:写之不尽,而我又所知有限
  • Jenkins的介绍遍地开花,谷歌,百度,一大把:入门的,进阶的,大师的,写得好的,真多!
  • Jenkins的本质,是个瑞士军刀,功能虽多,但你一旦知道了就可以很容易配置出来:确实是简单易上手,没关子可卖

因此,本文定位为一篇Jenkins的义务软文,专门忽悠你来使用Jenkins :-)

是的,这是一篇软文;但我可以拍胸脯保证,下面的内容都是经验的积累,实践的反思,绝非空洞的论述,更无坑蒙拐骗

Jenkins是什么

Jenkins(http://jenkins-ci.org/)是一个开源,跨平台,分布式的持续集成服务器(Continuous Integration, CI),是Hudson的天然继承人。类似的产品有:CruiseControl,BuildBot,TeamCity,BuildForge,ElectricCommander,TOAST,Bamboo,等

Jenkins可以干什么

注意!下面我要开始忽悠你了!

我们先一起来盘点下,大家(开发,测试,运维工程师们)日常工作中会涉及哪些工作,环节:

  • Coding
  • 单元测试
  • 静态代码检查
  • 代码编译,打包
  • 各种环境(测试,回归,集成,等)部署
  • 接口测试
  • UI自动化
  • 代码自动merge,tag
  • 产品上线
  • 一旦上线失败,回滚代码
  • 上线后,实时监控线上服务

这么多环节,可以说除了Coding须要大家的创造性劳动,是机器无法替代以外,其它所有的步骤都可以由机器代劳。这里,厚脸皮地推荐下:

Jenkins可以,而且是比较优雅地完成所有这些工作   :-)

Jenkins凭啥干得好?

全部Web界面化

Web化真是太好了,虽然各路大神会说:我会写脚本!

确实,上述那么多工作理论上都可以用脚本实现,但对于我等普通青年来说,只在页面上Click一下就可以一条龙实现编译打包,静态代码检查,测试环境部署,接口测试等几个步骤,然后,坐等结果邮件发出来,岂不悠哉!?

如下图(点击看大图)所示,使用了Jenkins的Pipeline插件,开发同学只须点击一下Run按钮,就可以在15min内完成自测,还可以任意指定测试分支哦!

j1

 

 

简单易用,结实耐操

Jenkins真心很容易上手:

  1. 从官网下载war包 http://jenkins-ci.org/
  2. 执行 java -jar jenkins.war
  3. 打开 localhost:8080
  4. 谷歌一把“Jenkins 入门” 或者 参看磋作(https://github.com/chenkan/Ni/issues/3)
  5. 谷歌一把“Jenkins 插件” 或者 “Jenkins plugin”
  6. 谷歌一把“Jenkins 持续集成”
  7. You Got It !

历史化,版本化,透明化

在Jenkins上面做的大量操作都会有记录,既包括对Job(中文且称作“任务”配置项的改动历史,也包括Job的执行历史,这些任务的:

  1. 执行者,时间,输入参数
  2. Git或者Svn版本信息(Revision/branch)
  3. Change log
  4. Console log
  5. 输出物(例如:Jar包,用例执行结果)

等等,都会保留下来(如下图所示)

j2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

而这一切,又都是公开的,透明的,只要设置合适的权限,项目组的所有成员都可以随时随地查看这些信息。Jenkins也提供了不少的插件,例如:XFP(eXtreme Feedback Panel Plugin),见下图(点击看大图),来帮助我们快速查看这些信息

j3

 

 

 

 

 

当前的软件开发,尤其是在互联网行业,速度越来越快,快速迭代,多分支并行开发,频繁上线,灰度发布,快速试错,等等,都要求我们能够保留足够的历史信息,作为推动项目流程的重要凭据以及一旦出现问题后的追溯依据

灵活的流程控制

在Jenkins中,一个任务(Job)可以有多种触发方式,例如:定时触发(一般用于每日构建),SCM触发(发现有代码Check-In至代码库就触发),被其它Job触发,RESTFUL API触发,等等

在Jenkins中,多个Job可以组合在一起构成一个体系。这种组合:

严格的权限控制

如果要在Jenkins上面部署产品上线,线上运维等生产环境相关任务,靠谱的安全机制必不可少

Jenkins允许在系统层面Job层面进行十分细致的授权管理(见下图,点击看大图

j4

 

 

 

 

 

 

Jenkins也支持LDAP登陆,方便Jenkins与公司内部的其它认证体系打通;

支持使用Token认证(这样当Jenkins启用LDAP后,用户不一定要使用LDAP密码,也可以使用Token进行身份认证)

各种贴心小细节

举2个栗子:

小问号,每个Job配置项后面都会有一个?让大家可以就近找到使用说明,有些还很详细哦!(见图,点击看大图

j5

 

 

 

内置N多预设变量,可以很方便地获取一些配置,执行信息。比如这个邮件配置,就大量使用了内置变量(见图):

j10

 

 

 

 

 

 

 

 

 

 

 

 

丰富的插件 & 活跃的社区

Jenkins之强大,灵活,很大一部分来自于其丰富的插件:https://wiki.jenkins-ci.org/display/JENKINS/Plugins

上文已经提及几个,这里再举2个栗子:

  • Email-ext Plugin,这是一个扩展了Jenkins默认发邮件通知的插件,通过设置邮件通知触发器和对邮件内容的可编程扩展,大大提高了邮件通知的灵活性
  • Sonar Plugin,Jenkins可以通过这个插件与Sonar(Jenkins的好基友)进行集成,把代码信息发送到Sonar进行检查,并在Jenkins上通过链接方便地展示相关结果

大量的插件使得Jenkins活力四射,生生不息!自己开发Jenkins插件也很方便哦!

在这方面,我的同事Frank有两篇干货十足,图文并茂的文章,墙裂推荐阅读

最后的小(忽)结(悠)

打枪?要选AK-47,十几岁的娃娃兵可以玩,牛哄哄的特种部队也会玩;

游戏?要选DOTA,菜鸟可以上去撸一把,普通青年可以进去虐菜,当然,也有大师级人物玩得出神入化;

持续集成?要选Jenkins,投入低,见效快,入门不要太方便,玩熟了以后,神马环境配置,各种测试都可以搞,再NB一点,产品运维,日常上线也可以有:真是老少咸宜,发家致富,居家必备!

补遗

  • Jenkins提供了REST API接口(https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API )厌倦了Web界面,或者觉得打开浏览器也颇为麻烦的童鞋可以尝试下Python + REST API的组合
  • 学习Jenkins的最佳方式是实践(玩),在同事Frank的组织下,我们尝试过以项目实践的方式在2个小时内从零开始连续Jenkins:部署Jenkins,添加Node,创建Job,执行单元测试,效果不要太好哦!
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐