随着软件开发复杂度的不断提升,团队开发成员间如何更好地协同工做以确保软件开发的质量已经慢慢成为开发过程当中不可回避的问题。尤为是近些年来,敏捷(Agile) 在软件工程领域愈来愈红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤为的重要。java
持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须常常集成他们的工做,甚至天天均可能发生屡次集成。而每次的集成都是经过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队可以更快的开发内聚的软件。shell
持续集成的核心价值在于:编程
持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减小重复过程以节省时间、费用和工做量;浏览器
持续集成保障了每一个时间点上团队成员提交的代码是能成功集成的。换言之,任什么时候间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;服务器
持续集成还能利于软件自己的发展趋势,这点在需求不明确或是频繁性变动的情景中尤为重要,持续集成的质量能帮助团队进行有效决策,同时创建团队对开发产品的信心。svn
业界广泛认同的持续集成的原则包括:工具
1)须要版本控制软件保障团队成员提交的代码不会致使集成失败。经常使用的版本控制软件有 IBM Rational ClearCase、CVS、Subversion 等;学习
2)开发人员必须及时向版本控制库中提交代码,也必须常常性地从版本控制库中更新代码到本地;测试
3)须要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建能够被软件的修改来直接触发,也能够定时启动,如每半个小时构建一次;网站
4)必须保证构建的成功。若是构建失败,修复构建过程当中的错误是优先级最高的工做。一旦修复,须要手动启动一次构建。
因而可知,一个完整的构建系统必须包括:
一个自动构建过程,包括自动编译、分发、部署和测试等。
一个代码存储库,即须要版本控制软件来保障代码的可维护性,同时做为构建过程的素材库。
一个持续集成服务器。本文中介绍的 Jenkins 就是一个配置简单和使用方便的持续集成服务器。
Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专一于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展现项目构建的趋势和稳定性。下面将介绍 Jenkins 的基本功能。
Jenkins 的安装很是简单,只须要从 Jenkins 的主页上下载最新的 jenkins.war 文件而后运行 java -jar jenkins.war。同时,还能够点击 Jenkins 页面上的 launch 按钮完成下载和运行 Jenkins。
启动 Jenkins 后,会有一个后台进程在命令行模式下运行。此时在浏览器地址栏中打开 http://localhost:8080 就能够看到 Jenkins 的页面了。Jenkins 的难得之处在于具备很是高的可用性,从它的界面中能很轻松地完成各类配置,更多的配置和使用信息,能够在 Jenkins 的官方网站上查询。
很是有趣的是,Jenkins 还提供了很是丰富的插件支持,这使得 Jenkins 变得愈来愈强大。咱们能够方便的安装各类第三方插件,从而方便快捷的集成第三方的应用。好比 Jenkins 提供了对于 IBM Rational ClearCase 的插件支持。
此外,Jenkins 提供了丰富的管理和配置的功能,包括系统配置、管理插件、查看系统信息、系统日志、节点管理、Jenkins 命令行窗口、信息统计等功能。试试看,您就会发现 Jenkins 很是好上手使用。
正如前文中所描述的那样,一个持续集成环境须要包括三个方面要素:代码存储库、构建过程和持续集成服务器。对 Jenkins 有了初步了解后,咱们经过一个实例来集中展现如何快速搭建一个简单的基于 Jenkins 的持续集成环境。
假设咱们使用的代码存储库是 IBM Rational ClearCase。Jenkins 提供了对 ClearCase 的插件支持,它能方便地让咱们链接到 Base ClearCase 或者 UCM ClearCase,使其成为 Jenkins Project 的代码控制器。另外,这个插件是基于 cleartool 命令的,因此必须在 Jenkins 的持续集成服务器上安装 ClearCase 的客户端程序。
在 Jenkins 的插件管理界面中选择 ClearCase Plugin,点击页面下方的 Install 按钮。
在打开的页面中提示安装完成后,Jenkins 须要从新启动来激活这个插件。从新执行 java -jar Jenkins.war 后,在 Jenkins 的页面中,咱们就能看到 ClearCase plugin 已经被安装到 Jenkins 了。
相似 IBM Rational ClearCase,SVN(subversion)是目前比较流行的版本管理工具。不少开源软件都是用 SVN 做为代码版本管理软件。为了让实例更具备表明性,本文中咱们使用 SVN 做为代码存储器。
接下来,咱们开始新建一个 Jenkins 项目, 因为咱们须要链接 SVN 的代码存储器, 咱们选择 Build a free-style software project。
而后咱们就能够很方便的配置这个 JenkinsTest 项目了。Jenkins 很人性化的一点是在每一个配置项的右侧都有一个帮助的图标,点击这个图标,Jenkins 会告诉您如何配置这个配置项。
根据实际的 SVN 服务器服务器信息配置 Source Code Management,这能让 Jenkins 知道如何从哪里获取最新的代码。本例中假设 Repository 就在本地。
根据开发须要,假设每个小时咱们须要从新构建一次。选择 Build periodically,在 Schedule 中填写 0 * * * *。
第一个参数表明的是分钟 minute,取值 0~59;
第二个参数表明的是小时 hour,取值 0~23;
第三个参数表明的是天 day,取值 1~31;
第四个参数表明的是月 month,取值 1~12;
最后一个参数表明的是星期 week,取值 0~7,0 和 7 都是表示星期天。
因此 0 * * * * 表示的就是每一个小时的第 0 分钟执行一次构建。
接下来就是要添加 build 的步骤了。Jenkins 提供了四个选项供咱们选择,能够根据须要执行或调用外部命令和脚本。
在本例中,咱们经过调用和执行 Windows batch command,将 SVN repository 中 Java 代码编译并生成 Jar 文件。也能够根据项目的实际编写本身的 shell 脚本配置在这里。
选择和配置其余的选项,好比邮件提醒,而后点击 save 保存。
接下来的每小时的第 0 分钟,JenkinsTest Job 就会被构建。咱们能够在 Jenkins 中观察构建的进度和最终的状态——成功或者失败。太阳表明以前的构建没有任何失败,蓝色的小球表明构建成功。
同时咱们能够点击 JenkinsTest 查看单次构建的 Console 的输出结果。从中咱们能看到构建的第一步是从 SVN 服务器上 check out 代码,而后调用咱们先前配置的 Windows batch command。
最后,咱们能够看到 build 的最后结果 Success,代表本次构建成功。
接下来咱们再次新建一个 Jenkins 的 Job,用于将生成的 build 分发到不一样的节点上。此次 build triggers 咱们选择 Build after other projects are built,让这个 Job 在 JenkinsTest 成功 build 后触发。这样一来就能达到咱们自动 build 和自动分发的功能。
不一样的是,此次咱们选择调用 Ant 脚原本完成分发的工做。只须要将 Ant 脚本的 XML 的文件配置在 Targets 中供 Jenkins 调用。
而后咱们就能够在 Jenkins 中观察构建的状态了。一旦构建失败咱们能看到相应的警示图标,同时,若是配置了邮件提醒,相关人员也会受到邮件。记住咱们先前所提醒的那样,分析和处理构 建的失败是优先级最高的工做。接下来,咱们还能够加入更多的 Jenkins 项目来实现自动化测试等功能,让持续集成更方便有效地服务于项目开发。
本文简单介绍了持续集成的概念并着重介绍了如何基于 Jenkins 快速构建持续集成环境。经过具体实例的描述,相信读者对 Jenkins 的基本功能和实现方法有个更清楚地认识和理解。其实,Jenkins 的功能远不至文中所述的这些,Jenkins 还有详尽的日志处理和持续集成构建状态的分析等功能。但愿在进一步的学习和应用中与你们分享。
查阅 Wikipedia,了解 持续集成的基本概念。
参考 Jenkins 官方网站首页,下载 Jenkins 最新版本和了解 Jenkins 的使用。
developerWorks Rational 专区,学习关于 ClearCase 技术的相关文章,扩展 ClearCase 方面的技术。
Version Control with Subversion, 学习 SVN 相关的技术。
“利用 Rational Team Concert 在敏捷开发中进行持续集成” (developerWorks,2010 年 4 月):本文将介绍如何利用 Rational Team Concert(RTC)在敏捷开发过程当中进行持续集成。详细说明了如何在 RTC 中经过采起一系列的步骤和脚本开发,来保证继续集成过程的连续和提升整个项目的效率。同时还阐述了每一步能够利用的工具和最佳实践,从而使开发过程更加规 范化,高效化。
“创建智慧的软件开发中心,第 3 部分:重视持续集成及应用生命周期管理平台”(developerWorks,2010 年 6 月):本文分析了银行软件开发中心应重视持续集成及应用生命周期管理平台的问题。
“使用 Rational BuildForge 实现软件开发的构建管理自动化及持续集成” (developerWorks,2011 年 2 月):本文将介绍持续集成的意义、概要描述 Lotus Symphony 的开发模式,及如何用 Rational BuildForge 实现对 Symphony 开发的支持。从应用的角度讲述,如何应用 BuildForge 实现软件产品的持续集成以及构建管理。
developerWorks Java 技术专区:这里有数百篇关于 Java 编程各个方面的文章。