使用Hudson进行持续集成(一)

转载 2012年03月21日 16:29:52
 

    译自: 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系统的基本结构。



 

图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,它就让我印象深刻。虽然我最初以为Hudson应该不会广为人知,但是在一个名为survey at the Java Power Tools site 的网站显示,在调查谁是最广泛使用的CI服务器时,受访者给它投了37.8%的选票(本文写作之时)。

     构件:构建完成后的软件成品,如JAR或WAR等,后续文章将不再重新说明。

支持的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的软件。
  • 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,现在开始执行安装。

Tomcat的安装会提示您选择安装选项。一定要选择Custom 选项,然后选择Service,如图2所示,这样Tomcat将作为一项服务运行。

 

Tomcat installation options

图 2. Tomcat 安装项

   下一步,选择一个目录来安装Tomcat,如图3所示。我强烈建议您选择一个没有空格的目录。嘿嘿,我相信你以后会感谢我。

 

Selecting an installation directory

图 3. 选择一个安装目录

 

    现在安装程序将要求您设置端口。默认端口为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

图 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

图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

 

此步骤完成,系统将提示您输入您的密码。

请注意,安装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

 

   如果您安装前未解压,请输入以下命令(当用户开始工作的时候)来安装它:

 

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

 

   要检验您的JBoss正在运行(最多可能需要几分钟的准备时间),请打开您的浏览器输入 http://localhost:8080/jmx-console 。如果成功,应该就会出现如图9显示的JBoss JMX控制台界面。

 

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完成一次构建,必须符合下列条件:

  • 您必须拥有一个可用的源代码仓库。
  • 这个仓库必须包含你想要构建的源代码。
  • 仓库里必须包含能构建源码的构建脚本。它们通常来源于Ant 或者Maven ,但是Hudson也支持简单Shell脚本、NAntMSBuild

   在本文中,您将使用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

 

     一般情况下,您可以对您要安装的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:

  • 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地址)。

 

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中配置谷歌的邮件服务器


现在基本的系统级配置已经完成。您可以准备进入一次具体的构建工作了。

 

在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 下几乎所有的这些配置也都是相同的。

  • 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例子中我没有配置安全 [你可以参考我的另外两篇文章:Use Hudson之标准安全设置使用matrix security对Hudson进行细粒度Job的安全控制,获取关于安全的详细配置]。
  • Disable build : 如果这里被勾选,这项工作将不会执行构建,直到选项禁用为止。(帮助:有时候,你会想暂停某个构建中的项目。例如,也许您正准备一次大的迁移,而且你知道新版本会失败。或者您想每一个小时构建一次,但您却发现CVS服务器将在未来24小时内down机。当这个选项被设置后,关于这个项目就不会再有新的构建。这样一来,您就可以在不想改变外部依赖或者提交错误通知的情况下禁用构建过程。)
  • Advanced options : 我没有使用这些选项,但是当此复选框被选中时,选项中就会暴露下面的接口:
    • Quiet period : 在这里您可以配置一个静态监控,当构建准备按某个计划运行时,实际上它就已经在开始执行了。
    • Use custom workspace : 默认情况下,Hudson将在${jboss-home}/.hudson/jobs/[项目名称](注:Linux环境 )下创建一个工作区 。此选项将允许您使用指定的地址替代(它)。
  • Source code management : 在默认情况下是这三个选项:
    • Subversion
    • 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中关于这个定时作业语法的详细描述(新版Quartz支持从秒开始触发,所以请查阅下面的cron帮助,对此引起的误导表示歉意)。
  • 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测试文档并为每次连续构建产生一份可持续的报告,依据正在进行的测试汇总处理结果。其结果是当前工作主页的一份报告,作业中的单元测试会随着时间的推移按由老至新进行陈列。
  • 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属性是一个可选的和额外的子目录,它将为此次构建创建一个工作区。

  “Use update”复选框是很重要的。这是Hudson准备从工作区构建执行前先刷新Subversion仓库以获取最新源码的最快捷的方式。这一动作是行之有效的,并在大多数情况下也相当快。警告,如果源构件已从仓库删除,工作区也会利用此步骤持续更新源码。另一种选择当然是禁用此选项,若是这样,Hudson将清除工作区并从源码仓库中重新注入。
   最后一个选项是指定一个源代码仓库浏览器,诸如FishEye或VisualSVN 。如果您拥有下面列表提供这些产品的一种,就选择适合的浏览器并把它指着自己的源代码仓库地址。

 

 

Example job setup, Part 2

图15. 作业示例, 第二部分

 

在图16中,您可以看到我填写的构建触发器详情:我每隔5分钟就检查一次Subversion,它们一有变化就构建一次。

(帮助:该字段遵循cron[Linux下任务定时系统]的语法(两者间仅仅有轻微差异)。
具体来说,每行由TAB键或空格隔开的5个字段组成:

MINUTE HOUR DOM MONTH DOW

MINUTE 一小时内多少分钟(0-59)

HOUR    一天内多少小时(0-23小时)

DOM     一个月内多少天(1-31)

MONTH  每月(1-12)

DOW     星期几(0-7),其中0和7都表示周日。

如果要指定一个字段允许多个值,就按下面提供的操作步骤(指定)。
优先顺序如下:

'*'                       可用来指定所有有效的值。

'M-N'                   可以用来指定一个范围,比如“1-5”

'M-N/X'或'*/X'      可用于在指定范围内跳跃一个X的值,比如在MINUTE字段中"*/15"表示"0,15,30,45","1-6/2"表示"1,3,5"。

'A,B,...,Z'            可以用来指定多个值,比如“0,30”或“1,3,5”。

任何空白行和'#'开始的行都将表示为注释而不予理睬。

此外,''@yearly', '@annually', '@monthly', '@weekly', '@daily', '@midnight''@hourly'都是支持的 。

举例说明:

#每分钟

* * * * *

#每一小时后第5分钟

5 * * * *

)

 

Example job setup, Part 3

图16. 作业示例, 第三部分

图17显示了我定义的Ant任务,以便执行构建过程。配置选项如下:

  • Ant version : 指定一个Ant实例,以执行构建。
  • Targets : 指定的Ant脚本文件中的一系列目标将被调用。这里可以留空,在这种情况下,脚本默认的任务将被执行。
  • Build file : Ant脚本执行完后的存放路径,它跟当期工作区是同级目录。
  • Properties : 这些额外定义的系统属性将可以通过这里传递到Ant脚本中。我这里的脚本包含了一些属性以便通过我的Subversion仓库的身份验证,因为我的程序中包括了一个把一些改变放回仓库的步骤。此外,我还定义了另一些属性,以便为我的单元测试配置参数。
  • 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获取关于当前作业的状态时,它们将如何影响最终的测定。(更多信息请查阅关于题为"作业状态"这一节)

  • E-mail notification : 定义一个邮件列表( 多项用空格间隔),以便当构建失败时发送一份通知。当一次作业总是不稳定或者被终止,"Send email for every unstable build "就可以不选,以阻止Hudson不断发送一份已获知条件的邮件通知。

  • Publish Cobertura coverage report : 我的构建脚本使用了Cobertura作为依据代码覆盖指令产生类文件的容器。当JUnit测试运行时,Cobertura 监测代码覆盖范围并且在测试完成后生成一个覆盖率报告。此选项表明Hudson Cobertura已经安装。它指示Hudson检索已确定的Cobertura XML 覆盖率报告,汇总它们到当前作业的Cobertura历史趋势中并且暴露到当前作业的主页上。标题为“Coverage Metric Targets”的选项表明在Hudson获取关于当前作业的状态时,允许你通过指定代码覆盖地图中的覆盖程度来影响最终的测定。(更多信息请查阅关于题为"作业状态"这一节)

Example job setup, Part 6

  图19. 作业示例, 第六部分

       

     Ha!总算到这一点了,如果您已经确认了这个新的作业,现在就运行它吧,看看它是怎么工作的。不管您是如何配置您的构建触发步骤,您都能够随时请求一次特定的构建(总之,随需应变),除非您选择了Disable Build。当您打算建立一个新的构建作业,或者调试像我上面描述的这些截图,如果没有等到构建触发器讲完是没有什么意义的。在下一节中,我将告诉您如何请求一次特别的构建,以及观察它到底是如何运行作业的。

相关文章推荐

使用Hudson进行持续集成(七)

译自: http://www.javaworld.com/javaworld/jw-12-2008/jw-12-hudson-ci.html  Project name :我已经把这个项目命...

使用Hudson进行持续集成

使用Hudson进行持续集成  译自: http://www.javaworld.com/javaworld/jw-12-2008/jw-12-hudson-ci.html 持续集...

使用Hudson进行持续集成(一)

转自: http://jdonee.javaeye.com/blog/310497 持续集成已成为当前许多软件开发团队在整个软件开发生命周期内侧重于保证代码质量的常见做法。在本系列文章中,Nichol...

使用Hudson持续集成

  • 2011年10月30日 00:21
  • 1.93MB
  • 下载

Dubbo实战教程--Hudson持续集成服务器的安装配置与使用

IP:192.168.4.221  8G内存(Hudson多个工程在同时构建的情况下比较耗内存) 环境:CentOS 6.6、JDK7 Hudson不需要用到数据库   Hudson只是一个持...
  • whs_321
  • whs_321
  • 2016年06月05日 14:24
  • 1157

Hudson 持续集成服务器的安装配置与使用

Hudson 持续集成服务器的安装配置与使用

使用Maven+Svn+Hudson持续集成开发流程实例【搭建二】

【说明】使用maven+svn+hudson进行持续集成开发方法 一 : 使用maven管理项目 1 maven主要的配置文件settings的主要配置介绍 settings文件的主要配置的解释: l...

使用Hudson持续集成Android项目

Hudson是一款持续集成引擎,架构在Subversion等版本控制工具上,依靠构建工具对项目进行集成构建,并且可以根据用户需求提供相应的反馈,比如发邮件,总的来说是比较实用的。 这几天在老师的...

使用Hudson与JsTestDriver实现的Javascript持续集成

JsTestDriver的单元测试兼容XML输出使它非常简单的建立JavaScript持续集成。这篇文章通过Hudson帮助你开始(创建自己的Javascript持续集成)。 安装H...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Hudson进行持续集成(一)
举报原因:
原因补充:

(最多只允许输入30个字)