持续集成回顾暨点滴分享[6] – 工具篇,Jenkins终于登场了!
工欲善其事,必先利其器说起持续集成,不得不讲Jenkins了。但苦思良久,才落笔开始写:Jenkins的内容太丰富了,各种小技巧,插件,配置,层出不穷,难以计数:写之不尽,而我又所知有限Jenkins的介绍遍地开花,谷歌,百度,一大把:入门的,进阶的,大师的,写得好的,真多!Jenkins的本质,是个瑞士军刀,功能虽多,但你一旦知道了就可以很容易配置出来:确实是简单易上手,没关子可卖
工欲善其事,必先利其器
说起持续集成,不得不讲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
内完成自测,还可以任意指定测试分支哦!
简单易用,结实耐操
Jenkins真心很容易上手:
- 从官网下载war包
http://jenkins-ci.org/
- 执行
java -jar jenkins.war
- 打开
localhost:8080
- 谷歌一把“
Jenkins 入门”
或者 参看磋作(https://github.com/chenkan/Ni/issues/3) - 谷歌一把“
Jenkins 插件”
或者 “Jenkins plugin”
- 谷歌一把“
Jenkins 持续集成”
- You Got It !
历史化,版本化,透明化
在Jenkins上面做的大量操作都会有记录,既包括对Job(中文且称作“任务”
)配置项的改动历史,也包括Job的执行历史,这些任务的:
- 执行者,时间,输入参数
- Git或者Svn版本信息(Revision/branch)
- Change log
- Console log
- 输出物(例如:Jar包,用例执行结果)
等等,都会保留下来(如下图所示)
而这一切,又都是公开的,透明的
,只要设置合适的权限,项目组的所有成员都可以随时随地查看这些信息。Jenkins也提供了不少的插件,例如:XFP(eXtreme Feedback Panel Plugin)
,见下图(点击看大图),来帮助我们快速查看这些信息
当前的软件开发,尤其是在互联网行业,速度越来越快,快速迭代,多分支并行开发,频繁上线,灰度发布,快速试错,等等,都要求我们能够保留足够的历史信息,作为推动项目流程的重要凭据以及一旦出现问题后的追溯依据
灵活的流程控制
在Jenkins中,一个任务(Job)可以有多种触发方式,例如:定时触发(一般用于每日构建),SCM触发(发现有代码Check-In至代码库就触发),被其它Job触发,RESTFUL API触发,等等
在Jenkins中,多个Job可以组合在一起构成一个体系。这种组合:
- 既可以是串行的,例如:编译打包(Build)触发单元测试(UT),单元测试触发接口测试(IT),接口测试触发UI自动化(UI)
- 也可以是并发的,例如:Build触发UT,UT同时触发IT及UI
- 还可以是条件的,例如:
if (Build成功) {执行后续Job} else {流程终止}
- 也可以更复杂的,参见插件:https://wiki.jenkins-ci.org/display/JENKINS/Build+Flow+Plugin 及https://wiki.jenkins-ci.org/display/JENKINS/Conditional+BuildStep+Plugin
严格的权限控制
如果要在Jenkins上面部署产品上线,线上运维等生产环境相关任务,靠谱的安全机制必不可少
Jenkins允许在系统层面及Job层面进行十分细致的授权管理(见下图,点击看大图)
Jenkins也支持LDAP
登陆,方便Jenkins与公司内部的其它认证体系打通;
支持使用Token
认证(这样当Jenkins启用LDAP后,用户不一定要使用LDAP密码,也可以使用Token进行身份认证)
各种贴心小细节
举2个栗子:
小问号,每个Job配置项后面都会有一个?
让大家可以就近找到使用说明,有些还很详细哦!(见图,点击看大图)
内置N多预设变量,可以很方便地获取一些配置,执行信息。比如这个邮件配置,就大量使用了内置变量(见图):
丰富的插件 & 活跃的社区
Jenkins之强大,灵活,很大一部分来自于其丰富的插件:https://wiki.jenkins-ci.org/display/JENKINS/Plugins
上文已经提及几个,这里再举2个栗子:
Email-ext Plugin
,这是一个扩展了Jenkins默认发邮件通知的插件,通过设置邮件通知触发器和对邮件内容的可编程扩展,大大提高了邮件通知的灵活性Sonar Plugin
,Jenkins可以通过这个插件与Sonar(Jenkins的好基友)
进行集成,把代码信息发送到Sonar进行检查,并在Jenkins上通过链接方便地展示相关结果
大量的插件使得Jenkins活力四射,生生不息!自己开发Jenkins插件也很方便哦!
在这方面,我的同事Frank有两篇干货十足,图文并茂的文章,墙裂推荐阅读:
- 持续集成之Jenkins插件使用(一)- 多个job之间的串并联
- 《易测试》2013年10月刊 之 《Jenkins插件》
最后的小(忽)结(悠)
打枪?要选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,执行单元测试,效果不要太好哦!
更多推荐
所有评论(0)