简介: 持续集成是一种软件开发实践,对于提升软件开发效率并保障软件开发质量提供了理论基础。Jenkins 是一个开源软件项目,旨在提供一个开放易用的软件平台,使持续集成变成可能。本文正是从持续集成的基本概念入手,经过具体实例,介绍了如何基于 Jenkins 快速搭建持续集成环境。java
随着软件开发复杂度的不断提升,团队开发成员间如何更好地协同工做以确保软件开发的质量已经慢慢成为开发过程当中不可回避的问题。尤为是近些年来,敏捷(Agile) 在软件工程领域愈来愈红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤为的重要。shell
持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须常常集成他们的工做,甚至天天均可能发生屡次集成。而每次的集成都是经过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队可以更快的开发内聚的软件。apache
持续集成的核心价值在于:tomcat
持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减小重复过程以节省时间、费用和工做量;服务器
持续集成保障了每一个时间点上团队成员提交的代码是能成功集成的。换言之,任什么时候间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;app
持续集成还能利于软件自己的发展趋势,这点在需求不明确或是频繁性变动的情景中尤为重要,持续集成的质量能帮助团队进行有效决策,同时创建团队对开发产品的信心。webapp
业界广泛认同的持续集成的原则包括:
1)须要版本控制软件保障团队成员提交的代码不会致使集成失败。经常使用的版本控制软件有 IBM Rational ClearCase、CVS、Subversion 等;
2)开发人员必须及时向版本控制库中提交代码,也必须常常性地从版本控制库中更新代码到本地;
3)须要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建能够被软件的修改来直接触发,也能够定时启动,如每半个小时构建一次;
4)必须保证构建的成功。若是构建失败,修复构建过程当中的错误是优先级最高的工做。一旦修复,须要手动启动一次构建。
因而可知,一个完整的构建系统必须包括:
一个自动构建过程,包括自动编译、分发、部署和测试等。
一个代码存储库,即须要版本控制软件来保障代码的可维护性,同时做为构建过程的素材库。
一个持续集成服务器。本文中介绍的 Jenkins 就是一个配置简单和使用方便的持续集成服务器。
Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专一于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展现项目构建的趋势和稳定性。下面将介绍 Jenkins 的基本功能。
Jenkins 的安装很是简单,只须要从 Jenkins 的主页上下载最新的 jenkins.war 部署到对应的应用服务器的webapp目录中(如tomcat中的webapp) ,启动应用服务器 , 在地址栏中输入 http://ip地址 : 服务器端口号 /jenkins 。 就能够进入Jenkins了。
很是有趣的是,Jenkins 还提供了很是丰富的插件支持,这使得 Jenkins 变得愈来愈强大。咱们能够方便的安装各类第三方插件,从而方便快捷的集成第三方的应用。好比 Jenkins 提供了对于 IBM Rational ClearCase 的插件支持。
图 4. Jenkins 能够集成 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 脚本配置在这里。
图 13. 配置 Execute Windows batch command
选择和配置其余的选项,好比邮件提醒,而后点击 save 保存。
接下来的每小时的第 0 分钟,JenkinsTest Job 就会被构建。咱们能够在 Jenkins 中观察构建的进度和最终的状态--成功或者失败。太阳表明以前的构建没有任何失败,蓝色的小球表明构建成功。
同时咱们能够点击 JenkinsTest 查看单次构建的 Console 的输出结果。从中咱们能看到构建的第一步是从 SVN 服务器上 check out 代码,而后调用咱们先前配置的 Windows batch command。
图 16. JenkinsTest 构建的 console 输出
最后,咱们能够看到 build 的最后结果 Success,代表本次构建成功。
接下来咱们再次新建一个 Jenkins 的 Job,用于将生成的 build 分发到不一样的节点上。此次 build triggers 咱们选择 Build after other projects are built,让这个 Job 在 JenkinsTest 成功 build 后触发。这样一来就能达到咱们自动 build 和自动分发的功能。
不一样的是,此次咱们选择调用 Ant 脚原本完成分发的工做。只须要将 Ant 脚本的 XML 的文件配置在 Targets 中供 Jenkins 调用。
而后咱们就能够在 Jenkins 中观察构建的状态了。一旦构建失败咱们能看到相应的警示图标,同时,若是配置了邮件提醒,相关人员也会受到邮件。记住咱们先前所提醒的那样,分析和处理构 建的失败是优先级最高的工做。接下来,咱们还能够加入更多的 Jenkins 项目来实现自动化测试等功能,让持续集成更方便有效地服务于项目开发。
============================================
实际在安装过程当中遇到的一些问题(linux中):
1.Linux SSH服务器不存在证书,链接svn时会出现 svn: E175002 错误
svn: E175002: OPTIONS /svn/01_%E5%85%AC%E5%8F%B8%E4%B8%9A%E5%8A%A1/06_%E6%95%99%E8%82%B2%E4%BA%91/01_%E5%B7%A5%E7%A8%8B/02_%E7%BC%96%E7%A0%81/%E5%AD%A6%E4%B9%A0%E5%B9%B3%E5%8F%B0/%E5%B9%B3%E5%8F%B0/branches/guizhou/edu-service failed (show details)
(Maybe you need to enter credential?)
解决方法:
本地服务器上安装svn客户端(具体步骤) :
http://subversion.apache.org/download/
http://d.1tpan.com/tp1810407612
wget http://apache.communilink.net/subversion/subversion-1.7.5.tar.bz2
下载subversion-1.7.5.tar.bz2
解压
tar xvfj subversion-1.7.5.tar.bz2
cd subversion-1.7.5
得到依赖
./get-deps.sh
./configure
configure: error: in `/root/subversion-1.7.5':
如报错则执行(安装一个C编译器)
yum install gcc
configure: error: We require OpenSSL; try --with-openssl
yum install openssl
yum install openssl-devel
make
make install
svn help
不用使用svn checkout将全部代码下载下来 ,本人直接使用
svn log (svn://.......) 这时服务器会从svn服务器上获取当前证书。
(删除以前svn记录 rm -rf ~/.subversion/auth)
2.Jenkins远程发布war包 :
首先须要在jenkins上面安装Deploy war to/ear to container 插件
而后须要在Tomcat(或者其余应用服务器中设置管理员权限) ,这里在tomcat-user.xml中设置manager-script 权限 而后再Jenkins上填写对应用户及其服务器地址:
说明:tomcat 服务器webapp中ROOT、 host-manager 原有文件夹必定不能删除
本文简单介绍了持续集成的概念并着重介绍了如何基于 Jenkins 快速构建持续集成环境。经过具体实例的描述,相信读者对 Jenkins 的基本功能和实现方法有个更清楚地认识和理解。其实,Jenkins 的功能远不至文中所述的这些,Jenkins 还有详尽的日志处理和持续集成构建状态的分析等功能。但愿在进一步的学习和应用中与你们分享。