说明:Jenkins折腾了好几个月了,打算写个系列记录下。有时间会尽可能更新的。
第一章 Jenkins是什么?
Jenkins 是一个可扩展的持续集成引擎。java
主要用于:web
- l 持续、自动地构建/测试软件项目。
- l 监控一些定时执行的任务。
Jenkins拥有的特性包括:数据库
- l 易于安装-只要把jenkins.war部署到servlet容器,不须要数据库支持。
- l 易于配置-全部配置都是经过其提供的web界面实现。
- l 集成RSS/E-mail经过RSS发布构建结果或当构建完成时经过e-mail通知。
- l 生成JUnit/TestNG测试报告。
- l 分布式构建支持Jenkins可以让多台计算机一块儿构建/测试。
- l 文件识别:Jenkins可以跟踪哪次构建生成哪些jar,哪次构建使用哪一个版本的jar等。
- l 插件支持:支持扩展插件,你能够开发适合本身团队使用的工具。
1 Jenkins的由来
目前持续集成(CI)已成为当前许多软件开发团队在整个软件开发生命周期内侧重于保证代码质量的常见作法。它是一种实践,旨在缓和和稳固软件的构建过程。而且可以帮助您的开发团队应对以下挑战:服务器
- l 软件构建自动化 :配置完成后,CI系统会依照预先制定的时间表,或者针对某一特定事件,对目标软件进行构建。
- l 构建可持续的自动化检查 :CI系统能持续地获取新增或修改后签入的源代码,也就是说,当软件开发团队须要周期性的检查新增或修改后的代码时,CI系统会不断确认这些新代码是否破坏了原有软件的成功构建。这减小了开发者们在检查彼此相互依存的代码中变化状况须要花费的时间和精力(说直接一点也是钱啊,呵呵)。
- l 构建可持续的自动化测试 :构建检查的扩展部分,构建后执行预先制定的一套测试规则,完成后触发通知(Email,RSS等等)给相关的当事人。
- l 生成后后续过程的自动化 :当自动化检查和测试成功完成,软件构建的周期中可能也须要一些额外的任务,诸如生成文档、打包软件、部署构件到一个运行环境或者软件仓库。这样,构件才能更迅速地提供给用户使用。
部署一个CI系统须要的最低要求是,一个可获取的源代码的仓库,一个包含构建脚本的项目。分布式
下图归纳了CI系统的基本结构:工具

该系统的各个组成部分是按以下顺序来发挥做用的:测试
1. 开发者检入代码到源代码仓库。优化
2. CI系统会为每个项目建立了一个单独的工做区。当预设或请求一次新的构建时,它将把源代码仓库的源码存放到对应的工做区。网站
3. CI系统会在对应的工做区内执行构建过程。ui
4. (配置若是存在)构建完成后,CI系统会在一个新的构件中执行定义的一套测试。完成后触发通知(Email,RSS等等)给相关的当事人。
5. (配置若是存在)若是构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器)或存储为软件仓库中的一个新版本。软件仓库能够是CI系统的一部分,也能够是一个外部的仓库,诸如一个文件服务器或者像Java.NET、 SourceForge之类的网站。
6. CI系统一般会根据请求发起相应的操做,诸如即时构建、生成报告,或者检索一些构建好的构件。
Jenkins就是这么一个CI系统。以前叫作Hudson。
如下是使用Jenkins的一些理由:
- l 是全部CI产品中在安装和配置上最简单的。
- l 基于Web访问,用户界面很是友好、直观和灵活,在许多状况下,还提供了AJAX的即时反馈。
- l Jenkins是基于Java开发的(若是你是一个Java开发人员,这是很是有用的),但它不只限于构建基于Java的软件。
- l Jenkins拥有大量的插件。这些插件极大的扩展了Jenkins的功能;它们都是开源的,并且它们能够直接经过web界面来进行安装与管理。
1.1 Jenkins的目标
Jenkins的主要目标是监控软件开发流程,快速显示问题。因此能保证开发人员以及相关人员省时省力提升开发效率。
CI系统在整个开发过程当中的主要做用是控制:当系统在代码存储库中探测到修改时,它将运行构建的任务委托给构建过程自己。若是构建失败了,那么CI系统将通知相关人员,而后继续监视存储库。它的角色看起来是被动的;但它确能快速反映问题。
特别是它具备如下优势:
- l Jenkins一切配置均可以在web界面上完成。有些配置如MAVEN_HOME和Email,只须要配置一次,全部的项目就都能用。固然也能够经过修改XML进行配置。
- l 支持Maven的模块(Module),Jenkins对Maven作了优化,所以它能自动识别Module,每一个Module能够配置成一个job。至关灵活。
- l 测试报告聚合,全部模块的测试报告都被聚合在一块儿,结果一目了然,使用其余CI,这几乎是件不可能完成的任务。
- l 构件指纹(artifact fingerprint),每次build的结果构件都被很好的自动管理,无需任何配置就能够方便的浏览下载。J