Jenkins - The most famous CI/CD system

Jenkins - The most famous CI/CD system

需求场景:

  • 开发A 新建了一个特性分支,写完了业务代码
  • 开发A 忘记了执行单元测试,就将此分支合并到 master
  • 运维B 将代码部署到生产服务器
  • 网站出现 bug,严重影响了用户体验

思考:

人总是会失误的,如何尽量避免这种人为失误?
能否将测试/部署等 「容易遗漏的、重复性的、枯燥的」 过程,交给机器自动完成?

好处:

  • 对个人:节省程序员的时间,可以将精力投入到更有趣的工作之中
  • 对团队:增加项目的可见性,增强团队对开发产品的信心
  • 对产品:减少风险,缩短 「开发-测试-交付」 的周期

Jenkins简介

Jenkins基于Java开发,是业界使用得最多的一款持续集成系统,市场份额占到了70%。

关于Jenkins,官方的介绍如下:

monitors executions of repeated jobs, such as building a software project or jobs run by cron。

文档中也说目前Jenkins专注于以下2个点:

Building/testing software projects continuously
Monitoring executions of externally-run jobs

其实Jenkins能够做的远不止这两点,其实它就是一个框架,你可以把它理解成可以自动执行任务(类似cron)并收集报告的基础工具。 再加上它有着非常丰富的插件库,所以使用起来让人感到既强大而又灵活。

Jenkins的突出特点:

  • 开源免费;
  • 安装、配置简单;
  • 跨平台,支持所有的平台;
  • master/slave支持分布式的build;
  • web形式的可视化的管理页面;
  • tips及时快速的帮助;
  • 社区非常高的开发、更新频率;
  • 庞大的插件体系,已有的200多个插件;

Jenkins 安装和启动

针对 Windows、Ubuntu、CentOS 等数 10 种操作系统都提供了原生安装包。

CentOS 6.5

yum install jenkins
service jenkins start

使用 Docker

docker run -d -p 8080:8080 -t zaiste/jenkins
启动后,Jenkins 会运行在 8080 端口,可通过浏览器访问。

Demo:自动化测试(任务)

Demo:自动化流程(CI/CD)

想象一下,有这么一套系统,你打开它,点击一下鼠标,就是自动取代码构建,部署,测试,发送测试报告,是不是觉得很屌!

甚至都不用手动点击,创建一个定时任务,主动check代码是否有变更。

提供了一个很好的框架,让你去像搭积木一样的建立一套流程。

依赖资源:

  • 基础层:服务器,运维支持(服务器端的自动化部署),数据库,平台(测试任务平台,测试数据收集、分析平台,测试报告分析、跟踪平台)
  • 中间层:自动化框架、工具,覆盖率,代码静态检查
  • 业务层:业务各种测试用例(接口测试脚本等)

插件:

  • http://127.0.0.1:8080/pluginManager/available
  • 构建(Ant,Maven,Gradle,MSBuild,Groovy,CMake,Grails)
  • 测试框架(JUint,Nunit,Selenium,RobotFramework)
  • SCM/VCS(Git,SVN,CVS,Bz等)
  • 通知(Email,Twitter,IM,IRC)
  • 分析(代码静态检查,代码覆盖率之类)
  • 报告(Junit,TestNG)
  • 虚拟机(Amazon EC2,VMWare,VirtualBox)

结语

  • 对于互联网团队来说,不仅要关注用户体验(对外),也要关注工作体验(对内)。
  • 不仅保证业务的交付(结果),也要注重开发流程的持续改进(过程)。
  • 不断优化开发流程 = 不断提升产品的交付速度和质量 + 不断提升员工的工作体验。
  • 程序员和公司的一种 双赢。

Roy T.Burns

An engineer, ideologist, strategist and foodie.

Subscribe to Roy T.Burns’ Blog

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!