lovefly_zero的博客文章
作者: lovefly_zero http://lovefly-zero.javaeye.com
使用Hudson进行持续集成
http://www.javaeye.com - 做最棒的软件开发交流社区
第 1 / 41 页 本书由JavaEye提供的电子书DIY功能自动生成于 2009-03-17
目 录
1. CI
1.1 使用Hudson进行持续集成(一) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 使用Hudson进行持续集成(二) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 使用Hudson进行持续集成(三) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 使用Hudson进行持续集成(四) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.5 使用Hudson进行持续集成(五) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.6 使用Hudson进行持续集成(六) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.7 使用Hudson进行持续集成(七) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.8 使用Hudson进行持续集成(八) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.9 使用Hudson进行持续集成(九) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
http://lovefly-zero.javaeye.com
第 2 / 41 页
1.1 使用Hudson进行持续集成(一)
发表时间: 2009-01-05
译自: http://www.javaworld.com/javaworld/jw-12-2008/jw-12-hudson-ci.html
持续集成已成为当前许多软件开发团队在整个软件开发生命周期内侧重于保证代码质量的常见做法。在本系
列文章中,Nicholas Whitehead给您介绍Hudson ,一个现在非常流行的开源CI服务器。他将告诉读者在您的
应用开发环境下(实例中包含Windows XP+Tomcat6或Ubuntu Linux+JBoss AS )如何搭建一个Hudson服
务器环境,还包含了Hudson中许多配置项的概述,和执行一个自动编译、测试、报告过程的示例。
持续集成(CI)是一种实践,旨在缓和和稳固软件的构建过程。CI能够帮助您的开发团队应对如下挑战:
• 软件构建自动化 :使用CI,您只要按一下按钮,它会依照预先制定的时间表,或者针对某一特定事件,
就开始对目标软件进行一次构建过程。想想吧,尤其您从头到尾构建一个构件的时候,这个构建过程应
该不会是局限于某一特定IDE、电脑或者个人的。
• 构建可持续的自动化检查 :CI系统能够设定成持续地执行新增或修改后签入的源代码,也就是说,当软
件开发团队需要周期性的检查新增或修改后的代码时,CI系统会不断确认这些新代码是否破坏了原有软
件的成功构建。这减少了开发者们在检查彼此相互依存的代码中变化情况需要花费的时间和精力(说直接
一点也是钱啊,呵呵)。
• 构建可持续的自动化测试 :一个构建检查的扩展部分,这个过程确保当新增或修改代码时不会导致预先
制定的一套测试在构建构件后失败。构建检查和测试一样,失败都会触发
单(Email,RSS等等)给相关
的当事人,告知对方一次构建或者一些测试失败了。
• 生成后后续过程的自动化 :一旦自动化检查和测试的构建已经完成,一个软件构件的构建周期中可能也
需要一些额外的任务,诸如生成文档、打包软件、部署构件到一个运行环境或者软件仓库。这样,构件
才能更迅速地提供给用户使用。
实现一个CI服务器你需要的最低要求是,一个比较容易获取的源代码仓库(包含源代码),一套构建脚本和
程序,一系列围绕构件构建的可执行测试。
图1概括了CI系统的基本结构。
http://lovefly-zero.javaeye.com 1.1 使用Hudson进行持续集成(一)
第 3 / 41 页
图1. CI系统的基本结构
该系统的各个组成部分是按如下顺序来发挥作用的:
1. 开发者检查新增和修改到源代码仓库后的代码。
2. CI服务器会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时,它将把源代码仓库
的源码存放到对应的工作区,哪里构建就执行哪里。
3. CI服务器会在新近创建或者更新的工作区内执行构建过程。
4. 一旦构建完成,CI服务器就会在一个新的构件中选择性地执行原先定义的一套测试。如果构建失败,相
关责任人将会通过电子邮件、即时短信或者其他的方式获取到(失败)通知。
5. 如果构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器) 和/或存储为软件仓库中的一
个新版本。这个如软件仓库可以是CI服务器的一部分,也可以是一个外部的仓库,诸如一个文件服务器
或者像Java.net、SourceForge分发的一个有效网址。源代码仓库和构件仓库是可以分开的,实际上它
可以利用一些根本没有包含任何源代码控制系统(CVS、SVN、CSS等等)的CI服务器。
6. CI服务器通常会用某种控制台来进行项目的配置和调试,并且根据请求发起相应的操作,诸如即时构
建、生成报告,或者检索一些构建好的构件。
Hudson: 持续集成服务器
持续集成 在过去几年因为它的逐渐成熟而颇受欢迎,今天您有不少的CI服务器可供选择,包括商业的和开源
的。我个人在同事推荐Hudson 之前已经使用过4个CI服务器。一接触Hudson,它就让我印象深刻。虽然我最
http://lovefly-zero.javaeye.com 1.1 使用Hudson进行持续集成(一)
第 4 / 41 页
初以为Hudson应该不会广为人知,但是在一个名为survey at the Java Power Tools site 的网站显示,在调查
谁是最广泛使用的CI服务器时,受访者给它投了37.8%的选票(本文写作之时)。
PS:本文章的原图片不清晰 ,请查看附件。本系列文章只为自己更加了解Hudson之用途,而且是初版,会
有一定的修改,所以请勿转载,谢谢。
附件下载:
• CIOverview.jpg (38.6 KB)
• http://lovefly-zero.javaeye.com/topics/download/82a80004-fa98-3fe2-9360-9b375824faee
http://lovefly-zero.javaeye.com 1.1 使用Hudson进行持续集成(一)
第 5 / 41 页
1.2 使用Hudson进行持续集成(二)
发表时间: 2009-01-06
译自: http://www.javaworld.com/javaworld/jw-12-2008/jw-12-hudson-ci.html
支持的SCMs
--SCM(源码控制管理)
Hudson完全支持与Subversion的集成,也只需少量配置就可以把CVS集成在一起,假定CVS客户端已经安
装在Hudson所在的主机。其他一些源代码管理(SCM)解决
Hudson也通过以插件的方式予以支持。在本文
写作之时,Hudson已经对下列SCMs提供了支持:
• Accurev
• BitKeeper
• ClearCase
• Git
• Mercurial
• Perforce
• StartTeam
• Team Foundation Server
• Visual SourceSafe
• URL SCM (一个特殊的SCM插件,允许使用网址作为SCM)
在这篇文章中,我将使用Subversion和Java.net源代码仓库,所以这些插件您都不必安装了。
Hudson是一个存放在Java.net免费的和开放源代码的软件产品。最初是由Kohsuke Kawaguchi编写的,他
是一名Sun工程师,在2005年2月宣布释放了他的博客。Hudson已经有大约154个版本。
以下的一些理由将告诉您我为什么喜欢Hudson,为什么我会推荐给您,除非您有任何不寻常的需求:
• 这是迄今为止我使用过的所有CI产品在安装和配置上中最简单的(CI产品)。
• 基于Web的用户界面非常友好、直观和灵活,在许多情况下,还对需单独配置的部分提供了基于AJAX
的即时反馈。
• Hudson是基于java开发的(如果你是一个Java开发人员,这是非常有用的),但它不仅限于构建基于
Java的软件。
http://lovefly-zero.javaeye.com 1.2 使用Hudson进行持续集成(二)
第 6 / 41 页
• Hudson本身是一个很简洁的组件,但它提供了一组很明确和可扩展API的Hudson组件。这批组成一个
大的类库的Hudson组件反过来又丰富了Hudson的功能;它们都是开源的,而且它们可以直接通过
Hudson的控制台来进行安装。
安装Hudson: Windows XP 或 Ubuntu Linux操作系统
使用Hudson,您需要一个方便和可支持的源代码控制系统(请参阅“支持SCMs ”列出的清
单),一份可构建构件的源码,和一串可进行构建的工作脚本。除此之外,您需要确定您已正确安装和配置
Hudson服务器[安装一个版本在1.5或以上的Java ;Hudson安装文件,该文件是以Java EE的 Web归档模式
(war)存在]。启动该服务器很简单,只需执行下面的命令行:
C:\hudson> java -jar hudson.war
这可能是较普通的做法,然而,我们一般会把Hudson部署到一个基于Servlet的2.4和JSP 2.0规格的Java
servlet容器里,如GlassFish, Tomcat, JBoss和Jetty。在接下来的章节,我将引导您完成安装两个Hudson的场
景:一个使用Windows XP+Tomcat6,另一个使用Ubuntu Linux操作系统+JBoss 4.2.3。(Ps:此文章发布后
JBoss AS 5.0已经发布了。)
安装Hudson:Windows XP+Tomcat6
首先我假定您已经在您的Windows XP系统中安装了1.5版或更高的Java。以下步骤将安装基于Windows
Service Installer的Tomcat6.0.18,使Hudson随Windows XP启动并且不需要用户登录的情况下启动,并在后
台运行。下载Tomcat的文件为apache-tomcat-6.0.18.exe,现在开始执行安装。
http://lovefly-zero.javaeye.com 1.2 使用Hudson进行持续集成(二)
第 7 / 41 页
1.3 使用Hudson进行持续集成(三)
发表时间: 2009-01-06
译自: http://www.javaworld.com/javaworld/jw-12-2008/jw-12-hudson-ci.html
Tomcat的安装会提示您选择安装选项。一定要选择Custom 选项,然后选择Service,如图2所示,这样
Tomcat将作为一项服务运行。
Tomcat installation
options
图 2. Tomcat 安装项
下一步,选择一个目录来安装Tomcat,如图3所示。我强烈建议您选择一个没有空格的目录。嘿嘿,我相信
你以后会感谢我。
Selecting an installation directory
图 3. 选择一个安装目录
http://lovefly-zero.javaeye.com 1.3 使用Hudson进行持续集成(三)
第 8 / 41 页
现在安装程序将要求您设置端口。默认端口为8080,这可能不是好的建议;当然,你只要确保其它应用程序
没有使用该端口。如果你不更改,Tomcat也将正常启动。您也将被要求为Tomcat管理员提供一个用户名和密
码。上面要展示的这一切,如图4所示。
Selecting a listening port and administrative
user name and password
图4. 选择一个监听端口和管理员的用户名和密码
安装程序将要求您提供您已经安装Java的JRE的位置。正如你所看到的图5 ,我使用的Sun Java 1.6.0_07 。
Selecting a Java JRE to run Tomcat
http://lovefly-zero.javaeye.com 1.3 使用Hudson进行持续集成(三)
第 9 / 41 页
图 5. 为Tomcat提供一个Java JRE
一旦你点击Install,安装程序将完成执行和启动服务。您可以在您的Web浏览器输入http://localhost:8080核
实Tomcat是否正常运行。(如果您使用的计算机上没有安装Tomcat,您可以使用适当的名称或IP地址来取代
它。)。该网页截图见图6 。
Verifying Tomcat installation and operation
图 6. 验证Tomcat是否安装完成和正确运行
现在,准备安装Hudson,复制hudson.war文件到您Tomcat安装目录的webapps子目录。如果您使用的是如
图3所示的同一个安装目录,这将是C:\Tomcat6\webapps 。Tomcat将把该war文件进行热部署,现在要做
的最简单的事情就是重启Tomcat。第一种是打开一个Dos界面,并输入以下命令:
C:\Tomcat6>net stop Tomcat6
C:\Tomcat6>net start Tomcat6
第二种是打开Window的服务。这个工具在控制面板的管理工具组中里。点击Windows工具栏,然后选择设
置,然后控制面板。在服务程序中寻找为Apache Tomcat的服务名,然后重启。如图7。
The Services applet
http://lovefly-zero.javaeye.com 1.3 使用Hudson进行持续集成(三)
第 10 / 41 页
图7. 服务面板
Hudson现在应该已经安装。您可以通过在您的Web浏览器输入http://localhost:8080/hudson验证它。
Hudson的主页面如图8。
The Hudson start page
图 8. Hudson首页
Ha!Ha!就是这么简单!如果您对一个基于Windows XP和Tomcat 的应用开发环境满意,这就是你所有的设
置。如果您想要一个JBoss和Ubuntu Linux操作系统的Hudson运行环境,请继续阅读。
安装Hudson: Ubuntu Linux操作系统8.04 +JBoss4.2.3(Hardy Heron)
想要在Ubuntu上安装Java 1.6,请打开一个shell并执行以下命令:
sudo apt-get install sun-java6-jdk
此步骤完成,系统将提示您输入您的密码。
http://lovefly-zero.javaeye.com 1.3 使用Hudson进行持续集成(三)
第 11 / 41 页
1.4 使用Hudson进行持续集成(四)
发表时间: 2009-01-07
译自: http://www.javaworld.com/javaworld/jw-12-2008/jw-12-hudson-ci.html
请注意,安装JBoss有几种
的;我这里推荐的方式,您将创建一个专用JBoss用户。最可取的做法是把
JBoss安装在您的主目录,这被认为是最佳的做法。这里有摘录了Ubuntu论坛中关于如何安装它的简要描述。
首先,你需要下载一个JBoss 4.2.3.GA的安装包。查找到JBoss - 4.2.3.GA.zip 。
下一步,您将需要为指定的JBoss创建一个用户、主目录和一个组。虽然组策略不是本文探讨的话题,但我可以
告诉你,它可以允许您在您的Ubuntu服务器上给其他用户分配JBoss的相关权限。
清单1显示了如何用命令行创建JBoss的主目录、用户和组,和如何安装JBoss服务器。有些命令只输入了前
缀,因为它们是一些专属命令。
清单1. 创建Jboss帐户并安装服务器
echo Create the jboss group
sudo groupadd jboss
echo Create the jboss user, define bash as the user's default shell and /home/jboss as the home directory
echo and make the user jboss part of the group jboss
sudo useradd -s /bin/bash -d /home/jboss -m -g jboss jboss
echo Copy the jboss-4.2.3.GA file to /home/jboss or download directly into that directory
sudo mv jboss-4.2.3.GA /home/jboss
echo Change the owner of the file to jboss
sudo chown jboss:jboss /home/jboss/jboss-4.2.3.GA
echo Log into the jboss account
sudo su jboss
echo Go to the jboss home directory
cd
echo Unzip the file jboss-4.2.3.GA
unzip jboss-4.2.3.GA
echo Create a symbolic link "jboss" for "jboss-4.2.3.GA".
echo This allows you to change JBoss versions with minimal changes
ln -s jboss-4.2.3.GA jboss
http://lovefly-zero.javaeye.com 1.4 使用Hudson进行持续集成(四)
第 12 / 41 页
如果您安装前未解压,请输入以下命令(当用户开始工作的时候)来安装它:
Sudo apt-get install unzip
JBoss服务器现在已经基本安装完成。您可以使用下面的命令启动服务器:
/home/jboss/jboss/bin/run.sh
然而,你会需要在这个例子中安装一个自动启动脚本,以便使服务器能随主机启动而自动启动。在JBoss的下
载中附带了三种不同的int.d 脚本,但是每个都需要做些调整;您也可以下载jboss-init.sh,它能自动启动和停
止JBoss服务器。清单2中显示了它的运行命令。
清单2. 安装JBoss的自动启动脚本
echo Move the jboss-init.sh file to /etc/init.d/ and rename it to jboss
sudo mv jboss-init.sh /etc/init.d/jboss
echo Change the owner of the /etc/init.d/jboss file to root
sudo chown root:root /etc/init.d/jboss
echo Make the /etc/init.d/jboss file executable
sudo chmod ug+x /etc/init.d/jboss
echo Activate the /etc/init.d/jboss file in the rc.d lifecycle process.
sudo update-rc.d jboss defaults
现在您可以使用下面的命令启动JBoss服务器来作为后台进程(当您注销它也不会终止):
sudo /etc/init.d/jboss start
http://lovefly-zero.javaeye.com 1.4 使用Hudson进行持续集成(四)
第 13 / 41 页
要检验您的JBoss正在运行(最多可能需要几分钟的准备时间),请打开您的浏览器输入 http://localhost:8080/
jmx-console 。如果成功,应该就会出现如图9显示的JBoss JMX控制台界面。
http://lovefly-zero.javaeye.com 1.4 使用Hudson进行持续集成(四)
第 14 / 41 页
1.5 使用Hudson进行持续集成(五)
发表时间: 2009-01-07
译自: http://www.javaworld.com/javaworld/jw-12-2008/jw-12-hudson-ci.html
The JBoss JMX console
图 9. JBoss JMX 控制台
部署Hudson很简单,只需要你把hudson.war 复制到/home/jboss/jboss/server/default/deploy下。你最
好是使用JBoss用户,这样才能确保JBoss服务器有权限读取该文件。Hudson应该在几秒钟内就会部署完毕。然
后你可以通过在浏览器中输入http://localhost:8080/hudson 来验证Hudson是否安装成功。显示的页面跟图8
一致 。
Hudson的构建
现在您通过刚才的步骤,应该在Windows XP的Tomcat或Ubuntu Linux操作系统的JBoss上把Hudson安
装并成功运行了吧。这也是在操作系统中安装大多数应用服务器和类似web任务管理系统常见的步骤;我想你
也同意,安装Hudson真是小菜一碟 。下一步,您将看到在配置Hudson的时候您需要了解的一些基础知
识,还将告诉您如何完成一次构建。
前置条件
如果您想在Hudson完成一次构建,必须符合下列条件:
http://lovefly-zero.javaeye.com 1.5 使用Hudson进行持续集成(五)
第 15 / 41 页
• 您必须拥有一个可用的源代码仓库。
• 这个仓库必须包含你想要构建的源代码。
• 仓库里必须包含能构建源码的构建脚本。它们通常来源于Ant 或者Maven ,但是Hudson也支持简单
Shell脚本、NAnt 和MSBuild 。
在本文中,您将使用Ant version 1.7 来构建示例代码。
配置Hudson
在您开始构建软件之前,需要对Hudson进行一些小小的配置。首先,您必须告诉Hudson您的Java JDK和
Ant的安装位置。点击http://localhost:8080/Hudson 打开Hudson的主页,单击Manage Hudson 。该网页
上附带了下一步,单击Configure System 。
在系统配置页面,这个列表中的第一个项显示的是Home directory 。这里包含了Hudson 要执行的所有工
作区和存储它的所有配置。我将在本文最后回到对这个目录的介绍。
为了配置一个JDK和Ant实例,请在每一节下面单击Add 按钮,这里将添加实例的名称和绝对地址。图10描
述了这两个部分。
Configuring Ant and JDK
图10. 配置 Ant 和 JDK
http://lovefly-zero.javaeye.com 1.5 使用Hudson进行持续集成(五)
第 16 / 41 页
一般情况下,您可以对您要安装的JDK和Ant指定一个任意的名称。这样做是因为您可以根据您项目的需要
配置多个实例,假如您需要Java的JDK是1.4,1.6和1.7,以及Ant1.6和1.7。当您要对您构建的项目进行配置,就
可以使用这些实例来灵活运用。请注意,Hudson会在打开这个页面时就提示您JAVA_HOME和ANT_HOME的
空白栏不是一个有效目录。当您输入一个有效的目录后,这些警告也将继续保留(但不会出现在页面上,只在目
录无效时再触发)。这只是一个简单的例子,它只是为了表达Hudson的用户友好性 :它会给您一个即时反
馈,而不是在等用户提交后再告诉您一个“目录无法找到”的错误。
因为我已经安装了一个Java 1.6的JDK ,我可以按照如下来配置我的JDK:
附件下载:
• JBossJMXConsole.jpg (62.2 KB)
• http://lovefly-zero.javaeye.com/topics/download/64e3ebce-46c9-331e-9d40-2db632e4aed4
• AddingAntandJDK.jpg (35.4 KB)
• http://lovefly-zero.javaeye.com/topics/download/f2dea406-f8a5-3d8f-8457-9852c5d50cc5
http://lovefly-zero.javaeye.com 1.5 使用Hudson进行持续集成(五)
第 17 / 41 页
1.6 使用Hudson进行持续集成(六)
发表时间: 2009-01-08
译自: http://www.javaworld.com/javaworld/jw-12-2008/jw-12-hudson-ci.html
• name : JDK 1.6.0_07
• JAVA_HOME :
◦ Windows : C:\jdk1.6.0_07
◦ Linux : /usr/lib/jvm/java-6-sun
如果您使用的是Windows ,您只要下载一个Ant 安装包,然后将它解压缩到目标目录。在Ubuntu中,您可
以使用下面的命令来安装Ant:
sudo apt-get install ant
sudo apt-get install ant-optional
ant -version
Apache Ant version 1.7.0 compiled on August 29 2007
然后把Ant安装到Ubuntu的/ usr / share /ant下。
图11中显示了在Ubuntu下配置JDK和Ant。当我的标签字段指向具体的安装地点后,警告就消失了。然后我
也加入了第二个Ant实例,这是个错误的配置 。在图中,您可以看到,如果为Ant的实例输入一个有效的目
录,但是实际上路径并不正确,Hudson就会警告您,您输入的(地址)似乎不正确。JDK和Ant一样(都会提出类
似的警告)。后来我从输入框中删除了这个错误的Ant地址,只留下了有效的(Ant地址)。
http://lovefly-zero.javaeye.com 1.6 使用Hudson进行持续集成(六)
第 18 / 41 页
JDK and Ant configured under Ubuntu
图11. 在 Ubuntu下配置JDK 和 Ant
在下面进行同样的操作时,您将会看到这样的一个警告:"Hudson无法找到可执行的CVS"。如果您没有使用
CVS ,可以直接地忽略它。
最后一个重要的选项就是在此网页上配置SMTP,使Hudson能够以电子邮件的方式发送重要的通知,例如构
建失败。如果您的SMTP服务器需要身份验证,您将需要使用高级选项。我使用谷歌的应用服务来托管域,但如
果您拥有一个有效的Gmail帐户,您可以使用您的Gmail地址和谷歌的SMTP服务器。图12显示了我在Hudson
的邮件服务器配置。
Configuring Hudson's SMTP
forwarder using Google's mail server
图12. 在Hudson的 SMTP中配置谷歌的邮件服务器
现在基本的系统级配置已经完成。您可以准备进入一次具体的构建工作了。
http://lovefly-zero.javaeye.com 1.6 使用Hudson进行持续集成(六)
第 19 / 41 页
在Hudson下配置一次构建
打开http://localhost:8080/Hudson就会显示Hudson的主页,点击 New Job 。图13显示了下一步的截屏;
这时,您需要为新的构建工作指定一个名称。这里有几种的工作类型可供您选择,但在本文的讨论范围内,您
将把重点放在Build a free-style software project 上。对于其他的类型,我经常使用的Copy existing job ;
这主要为了能让我在复制现有的工作基础上新建一次构建工作。
New job name
图13 . 新建工作名
接下来,我将为我的HeliosJMX项目添加一次构建工作,它的源码存放在java.net网站的Subversion仓库里
。因为我将要构建的是trunk上最新的源代码,所以我将把这个工作命名为HeliosJMXTrunk 。输入完成,单
击OK 。
你将会看到大量的关于这个工作的配置,这是一些很长的细节,关于它的详细配置如下所列。在每个选项右
侧都会有一个小问号(? [单击“展开”和“隐藏”])图标。请不用疑惑,因为点击它您就能获取关于每个配置项
的详细说明。这不会迫使您进入另一个网页,从而失去您的工作进程;而是在本网页插入帮助文本,当然这样
使用帮助是微侵入的,不会对网页造成什么影响。事实上在Windows和Linux 下几乎所有的这些配置也都是相
同的。
附件下载:
• AddingAntandJDK2.jpg (46.1 KB)
• http://lovefly-zero.javaeye.com/topics/download/f5bc3e6c-921d-3907-b7b8-8b59831ca94b
• NewJobName.jpg (48.6 KB)
• http://lovefly-zero.javaeye.com/topics/download/54438c12-ce4a-3b23-a986-12d375d4255b
• SMTPConfiguration.jpg (68.2 KB)
• http://lovefly-zero.javaeye.com/topics/download/7d304ebb-7c67-323f-bc62-3981a9f2634a
http://lovefly-zero.javaeye.com 1.6 使用Hudson进行持续集成(六)
第 20 / 41 页
1.7 使用Hudson进行持续集成(七)
发表时间: 2009-01-13
译自: http://www.javaworld.com/javaworld/jw-12-2008/jw-12-hudson-ci.html
• Project name :我已经把这个项目命名为HeliosJMXTrunk ,但你也可以在这里修改它。
• Description : 这是一个自由项,主要用来说明你关于这次构建工作的描述。可不填。(帮助:这说明放在
项目的首页,以便访问者可以知道这个工作的内容。您也可以在这里使用任何HTML标记。)
• Discard old builds : Hudson默认将保留过去的构建,除非你事先选中此框。(帮助:这里控制着您想要
在Hudson所在的磁盘把构建记录存储的有效期(诸如控制台输出、编译产成品等等)。Hudson为此提供
了两个
:1。时间驱动。在Hudson中您可以判断如果达到一定时限来删除一条记录(例如,七天
前)。2。数量驱动。在Hudson中您可以确保它拥有N份构建。如果又有新的构建开始,最早的那份(记
录)就将被删除。Hudson也可以让您建立的个别构建定义为'永远保持这个记录',以便防止某些重要的
构建被自动丢弃。)
• This build is parameterized : 如果选择此选项,Hudson将允许您提供一套任意的键值对参数,它们
会被传递到构建过程里。配置的参数往往是构建运行环境中的一些环境变量。(帮助:当您使用了
Hudson的各种自动化,有时要求在构建过程中提供一组用户的输入,使用“parameterize”就能够更
方便构建。例如,您可能会设立一个按需测试,在那里用户可以提交一个二进制文件的压缩文件来进行
测试。
本节参数可以完全按照您构建的需要配置。参数是以名字区分的,所以您可以有多个参数,只要它们名
称不同。
关于此功能的更多资料请查看维基专题讨论 。)
• Enable project-based security : Hudson支持全面的安全方案,可以强制用户在通过身份验证后,
再访问Hudson网页;它也可以通过控制用户的权限来管理用户的工作。在这个Hudson例子中我没有配
置安全 。
• Disable build : 如果这里被勾选,这项工作将不会执行构建,直到选项禁用为止。(帮助:有时候,你
会想暂停某个构建中的项目。例如,也许您正准备一次大的迁移,而且你知道新版本会失败。或者您想
每一个小时构建一次,但您却发现CVS服务器将在未来24小时内down机。当这个选项被设置后,关于
这个项目就不会再有新的构建。这样一来,您就可以在不想改变外部依赖或者提交错误通知的情况下禁
用构建过程。)
• Advanced options : 我没有使用这些选项,但是当此复选框被选中时,选项中就会暴露下面的接口:
◦ Quiet period : 在这里您可以配置一个静态监控,当构建准备按某个
运行时,实际上它就
已经在执行了。
◦ Use custom workspace : 默认情况下,Hudson将在${jboss-home}/.hudson/jobs/[项目名
称](注:Linux环境 )下创建一个工作区 。此选项将允许您使用指定的地址替代(它)。
• Source code management : 在默认情况下是这三个选项:
◦ Subversion
http://lovefly-zero.javaeye.com 1.7 使用Hudson进行持续集成(七)
第 21 / 41 页
◦ CVS
◦ None
这个None会误解我先前的主张 :一个先决条件是要有一个源代码仓库。但我坚持认为,在大多
数情况下,为Hudson选择某个仓库是绝对必要的。本文稍后,我将讨论如何安装Hudson插件。如果
您安装了一个与SCM相关的插件,并重新启动Hudson,那么在这个清单上也将出现一些新的选择。本
文,我使用 Subversion 。当您选择Subversion后,将展开一个配置表单。我会在下面的某一部分中单
独描述这个配置(见“ Subversion的工作配置” ) 。
• Build after other projects are built : 此选项支持一条装配(流水作业)线——作业依赖: 一个作业依赖
于另一个作业的输出的情况 —— 或者如以下情形:你只是想简单的把一些有关的工程构建编入一个组
以便一起构建。当您一选择它,你将得到一个字段,输入其他工程的名字[多个项目名间用逗号分隔]
后,这个构建应该就可以运行。
• Poll SCM : 这是CI 系统中常见的选项。当您选择此选项,您可以指定一个定时作业表达式来定义
Hudson每隔多久检查一下您源代码仓库的变化。如果发现变化,就执行一次构建。例如,表达式中填
写0,15,30,45 * * * *将使Hudson每隔15分钟就检查一次您源码仓库的变化。更多信息请查阅Quartz
CronTrigger中关于这个定时作业语法的详细描述。
• Build periodically : 此选项 (也是使用定时作业表达式)仅仅通知Hudson按指定的频率对项目进行构
建,而不管SCM是否有变化。我这个作业就属于目标测试环境是按某种方式定期修订的而SCM却是静
态的情况。如果您想在这个作业中运行一些测试用例的话,它可能就很有帮助。
• Add build step : 按一下这个按钮,添加了一项指令以执行构建脚本。您的指令可以是下列之一:
◦ 执行 Shell
◦ 执行 Windows 批处理
◦ 使用Ant(这是我将要使用的选项,在下面我会做详细的说明)
◦ 使用Maven
• Archive the artifacts : 当您选择此选项,就可以指定文件和目录的掩码(Ant风格的掩码,可以指定包
含与排除),当与掩码相匹配的构件在构建时将被添加到Hudson的构件仓库,它们会用作业(名)和构
建序号来标识。所有以前构建过的构件可以选择性地丢弃,以节省您Hudson服务器上的磁盘空间。
• Record fingerprints of files to track usage : 当您选择此选项,它使用类似Ant方式的掩码,恁可
以指示Hudson去生成构件的指纹码,确保您能够更容易地找到它们的位置,另外判断系统中的这些构
件是否还在使用。
• Publish javadoc : 如果您的构建脚本能生成JavaDoc,此选项将指示Hudson发布这些内容,而且立
即把它公布在当前工作的主页上。每一个成功构建的文档内容都可以保留,但在默认情况下只保留最新
的。
• Publish JUnit test result report : 如果您的构建脚本执行了JUnit测试,此选项将指示Hudson处理
XML测试文档并为每次连续构建产生一份可持续的报告,依据正在进行的测试汇总处理结果。其结果是
当前工作主页的一份报告,作业中的单元测试会随着时间的推移按由老至新进行陈列。
http://lovefly-zero.javaeye.com 1.7 使用Hudson进行持续集成(七)
第 22 / 41 页
• Aggregate downstream test results : 在某些情况下,作业中一组单元测试花费的时间大大长于实
际构建它所花的时间。在这些情况下,你可以选择把构建和测试分为不同的作业,以便完成构建能相对
迅速,一旦与这相关的一个或多个测试作业就执行完毕,构建也就成功完成了。 当您选择这个选项,
Hudson就会把构建后作业的测试结果进行统计,并且能追溯到它们的明细。用以做为本次构建成功或
失败的主要依据。
• Build other projects : 较之前面的选项,这个选项主要用来实现一个合乎逻辑的构建和测试过程,它
会被分为两个或两个以上的物理工作,并且会按顺序执行。当此项被选择后,您将得到一个字段,可以
在其中输入您想在当前作业中后执行的其它作业名[多项作业可用逗号分隔]。即使目前的作业得出结论
说构建可能不稳定,您也可以选择这样做。(关于“作业的稳定性”请查阅“作业状态”章节以获取更多
信息)
• E-mail notification : 当您选择此选项,您可以输入一个或多个电子邮件地址[多个可用空格分隔],当
Hudson完成了执行作业后,将会给它们发送通知。事件触发时将产生一份Email,包括构建失败、构建
不稳定等。这儿有一个额外的选项,当由于用户的错误提交造成Hudson决定废弃此次构建,将会发送
一份专门的邮件给这位SCM提交者,以便让他检查源代码。
Ha!Ha!看来这些信息太多了,让您有点无法把握吧!没关系,为了让您更好的掌握这一切,您将在下面
看到一个构建作业的样例。这样一来,您就会了解到这些配置项是如何运用到实践中的。
在Hudson配置一次构建作业:示例
下面是一个如何在实际作业中配置我的Hudson服务器。这项作业构建的是我命名为“HeliosJMX”的实用
类库。这一节的所有图片都是我为了描述上一节而因此新建一个作业的截图。
在图14中,您可以看到项目的名称、说明和一个废弃策略。(指示Hudson保持过去5次构建,但废弃更前的
构建。)
Example job setup, Part 1
图14. 作业示例, 第一部分
图15显示了在此次作业中Subversion的安装位置。 这个Subversion仓库的URL网址存放在java.net上:
https://helios.dev.java.net/svn/helios/helios-jmx/trunk(貌似现在进不去了,因为需要密码 )。Local
module directory属性是一个可选的和额外的子目录,它将为此次构建创建一个工作区。
http://lovefly-zero.javaeye.com 1.7 使用Hudson进行持续集成(七)
第 23 / 41 页
“Use update”复选框是很重要的。这是Hudson准备从工作区构建执行前先刷新Subversion仓库以获取最
新源码的最快捷的方式。这一动作是行之有效的,并在大多数情况下也相当快。警告,如果源构件已从仓库删
除,工作区也会利用此步骤持续更新源码。另一种选择当然是禁用此选项,若是这样,Hudson将清除工作区并
从源码仓库中重新注入。
最后一个选项是指定一个源代码仓库浏览器,诸如FishEye或VisualSVN 。如果您拥有下面列表提供这些产品
的一种,就选择适合的浏览器并把它指着自己的源代码仓库地址。
Example job setup, Part 2
图15. 作业示例, 第二部分
在图16中,您可以看到我填写的构建触发器详情:我每隔5分钟就检查一次Subversion,它们一有变化就构
建一次。
Example job setup, Part 3
图16. 作业示例, 第三部分
图17显示了我定义的Ant任务,以便执行构建过程。配置选项如下:
• Ant version : 指定一个Ant实例,以执行构建。
• Targets : 指定的Ant脚本文件中的一系列目标将被调用。这里可以留空,在这种情况下,脚本默认的任
务将被执行。
• Build file : Ant脚本执行完后的存放路径,它跟当期工作区是同级目录。
• Properties : 这些额外定义的系统属性将可以通过这里传递到Ant脚本中。我这里的脚本包含了一些属
性以便通过我的Subversion仓库的身份验证,因为我的程序中包括了一个把一些改变放回仓库的步骤。
此外,我还定义了另一些属性,以便为我的单元测试配置参数。
http://lovefly-zero.javaeye.com 1.7 使用Hudson进行持续集成(七)
第 24 / 41 页
• Java options : Java的命令行选项可以通过这里传递。有了这个配置,您就可以使用Ant -debug,即
一边调试脚本中存在的问题,一边让Ant有选择生成一份特定的诊断日志。其它常见的选项如指定Java
的最小和最大的堆栈大小(-Xms 和 -Xmx ),这提醒您将在Hudson中启用一个新的JVM实例来运行您的
构建脚本。
Example job setup, Part 4
图17. 作业示例, 第四部分
图18显示了构建完成后我定义的一些动作:
• Archive artifacts : 当构建一旦完成,就会指示Hudson归档已构建的构件。这是一个Ant方式的掩
码,用来指定一个目录把与之关联的工作区、文件名和一些扩展文件进行归档。归档后的这部分(文件)
可以在当前构建实例的主页上很容易的获取到。高级选项还允许你指定一个排除掩码,你可以选择删除
所有存档过的构件,除了最后一次成功的构建产生的构件。
• Publish javadoc : 类似上面的选项,它适用于在构建的过程中产生的任何Javadoc内容。
• Publish JUnit test result report : 指示Hudson在定义的路径上获得一个JUnit XML结果文件,并且
汇总它们到历史趋势报告。
Example job setup, Part 5
图18. 作业示例, 第五部分
图19显示了构建完成后我定义的更多的动作:
• Publish FindBugs analysis results : 我的构建脚本执行FindBugs静态代码,它用于分析作业的源代
码,并生成一个调查报告。此选项表明Hudson FindBugs插件已安装。它指示Hudson检索FindBugs
XML结果报告,汇总它们到当前作业的历史趋势中并且暴露在当前作业的主页上。FindBugs插件的高
级选项允许您当FindBugs上报时确定断言的类别,以及在Hudson获取关于当前作业的状态时,它们将
如何影响最终的测定。(更多信息请查阅关于题为"作业状态"这一节)
http://lovefly-zero.javaeye.com 1.7 使用Hudson进行持续集成(七)
第 25 / 41 页
• E-mail notification : 定义一个邮件列表( 多项用空格间隔),以便当构建失败时发送一份通知。当一次作
业总是不稳定或者被终止,"Send email for every uns