之前在网上查过一些资料,都说hudson作为持续集成工具是十分好的,因为要在实际项目中应用,所以自己尝试搭建持续集成服务器,持续集成相对其他,网上的资料少之又少,尤其是hudson,基本上网上的资料大部分是针对ant,而且教程更是少的可怜。因为我们的项目要用到maven2,所以我最开始尝试的是使用continuum(maven开源项目中的子项目),个人认为对maven2支持应该不错,有兴趣大家可以去了解一下。开始用continuum搭建持续集成服务器成功,但是感觉continuum在使用上一般,主要针对用户体验,功能相对比较简单,并没有大量的详细内容。在网上看到hudson对maven2支持也是十分不错,所以尝试搭建hudson,经过查资料和胡乱尝试,终于成功,总体感觉比continuum要好些,尤其是在功能管理上,下面将自己搭建的过程写出来,希望大家可以交流,因为也是初次使用,很多地方可能不对,见谅。
一、持续集成的概念
概念网上很多了,这里就不再详细说了。
持续集成简称CI,持续集成是频繁、持续的在多个团队成员的工作中进行集成,并且给与反馈。一个典型的持续集成周期包括以下几个步骤:
1. 持续集成服务器不断从版本控制服务器上检查代码状态,看代码是否有更新。
2. 如果发现代码有最新的提交,那么就从版本控制服务器下载最新的代码。
3. 等代码完全更新以后,调用自动化编译脚本,进行代码编译。
4. 运行所有的自动化测试。
5. 进行代码分析。
6. 产生可执行的软件,能够提供给测试人员进行测试。
持续集成服务器,比如CruiseControl或者VSTS
CruiseControl, Anthill, Bamboo, TeamCity, Continuum,hudson
二、hudson的简介
Hudson 是一种革命性的开放源码 CI 服务器,它从以前的 CI 服务器吸取了许多经验教训。Hudson 最吸引人的特性之一是它很容易配置:很难找到更容易设置的 CI 服务器,也很难找到开箱即用特性如此丰富的 CI 服务器。Hudson 容易使用的第二个原因是它具有强大的插件框架,所以很容易添加特性。例如,一个 Hudson 插件可以随时间的推移跟踪 FindBugs 和代码覆盖。它还可以报告测试结果的趋势(来自 JUnit 或 TestNG)以及构建结果和对应的执行时间。
Hudson 需要运行 Java 5。如果需要使用 Hudson 附带的嵌入式容器(Winstone)之外的其他容器,那么只需使用一种 Servlet 2.4 容器。对于大多数情况,Winstone 就足够了。
三、hudson的安装(jdk5+tomcat+maven2)
使用hudson的好处重要是因为它安装和配置起来比较方便,一般只需要两个步骤:
1、下载最新版本的hudson工程包(war),官网下载即可 http://hudson.gotdns.com/latest/hudson.war;
2、将下载的war包直接放到tomcat_home/webapps目录下
启动tomcat,启动完成,访问http://localhost:8080/hudson/,(tomcat端口默认是8080);如果看到欢迎页面表示安装成功;(从网上找的,因为我的里面已经有项目了,不过大同小异,:))
四、hudson的构建
前置条件:
如果您想在Hudson完成一次构建,必须符合下列条件:
- 您必须拥有一个可用的源代码仓库。
- 这个仓库必须包含你想要构建的源代码。
- 仓库里必须包含能构建源码的构建脚本。它们通常来源于Ant 或者Maven ,但是Hudson也支持简单Shell脚本、NAnt 和MSBuild 。
在本文中,我们使用maven2来构建
配置hudson:
在您开始构建软件之前,需要对Hudson进行一些小小的配置。首先,您必须告诉Hudson您的Java JDK和MAVEN2的安装位置。点击http://localhost:8080/Hudson 打开Hudson的主页,单击Manage Hudson 。该网页上附带了下一步,单击Configure System 。
1.如下图,配置MAVEN_HOME
说明:开始需要点击按钮 add maven,出现下图,将默认的Install automatically去掉,手动指定MAVEN_HOME目录
可以设置多个MAVEN的版本,在项目中选择
2.配置jdk版本,方法比较类似,可设置多个
这里我设置了两个JDK
hudson做的比较人性化,如果home目录指定不对,会有相应提示
3.配置邮件提醒功能
如果build失败可以发送邮件提醒相关人员,husdon的邮件配置比continuum配置要简单的多,这里我们用Gmail的邮件服务器
如下图配置:
SMTP 填写gmail 的即可
管理员的邮件地址,即所有的通知邮件通过该邮箱发送
hudson URL,地址,本地会有警告,填写IP地址,警告应该会消失,没试过,呵呵
点击高级选项设置邮件的用户名、密码及端口,如下:
点击 Test configuration by sending e-mail to System Admin Address 可以进行邮件测试
配置完成,hudson的基本配置完成,下面将实际项目引入
在首页点击 New Job,出现以下:
输入项目名称,选择 Build a maven2 project ,点击OK进入下一步
各选项说明:
Project name :我已经把这个项目命名为xwb,但你也可以在这里修改它。
Description : 这是一个自由项,主要用来说明你关于这次构建工作的描述。可不填。(帮助 :这说明放在项目的首页,以便访问者可以知道这个工作的内容。您也可以在这里使用任何HTML标记。)
Discard old builds : Hudson默认将保留过去的构建,除非你事先选中此框。(帮助 :这里控制着您想要在Hudson所在的磁盘把构建记录存储的有效期(诸如控制台输出、编译产成品等等)。Hudson为此提供了两个标准:1。时间驱动。在Hudson中您可以判断如果达到一定时限来删除一条记录(例如,七天前)。2。数量驱动。在Hudson中您可以确保它拥有N份构建。如果又有新的构建开始,最早的那份(记录)就将被删除。Hudson也可以让您建立的个别构建定义为'永远保持这个记录',以便防止某些重要的构建被自动丢弃。)
This build is parameterized : 如果选择此选项,Hudson将允许您提供一套任意的键值对参数,它们会被传递到构建过程里。配置的参数往往是构建运行环境中的一些环境变量。(帮助 :当您使用了Hudson的各种自动化,有时要求在构建过程中提供一组用户的输入,使用“parameterize”就能够更方便构建。例如,您可能会设立一个按需测试,在那里用户可以提交一个二进制文件的压缩文件来进行测试。
本节参数可以完全按照您构建的需要配置。参数是以名字区分的,所以您可以有多个参数,只要它们名称不同。 关于此功能的更多资料请查看维基专题讨论 。)
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 中关于这个定时作业语法的详细描述。
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提交者,以便让他检查源代码。
从网上抄的,可能有的地方不一样,但基本上还是正确的
下面针对配置说以下几点:
1、JDK的选择,之前配置好的JDK在这里可以选择
2、勾选 可以输入保存的历史记录(个人理解)
3、配置代码控制服务器,我用的是SVN
在本地搭建的代码控制服务器,不会的同学可以去网上找资料,这里不多讲了,呵呵,我没有启动http服务器,这里直接用的svn,可以找到,http更改没有问题了,其他协议没有试过,想continuum可支持file协议(默认是关闭的),指向项目的根目录,如果不存在,hudson也会给出相应的提示,真人性化啊,呵呵
PS:用户名密码暂时还不知道哪里配,知道的同学告诉我啊,因为下载代码并不需要用户名密码(权限控制,修改时需要)
Local module directory 属性是一个可选的和额外的子目录,它将为此次构建创建一个工作区。
“Use update”复选框是很重要的。这是Hudson准备从工作区构建执行前先刷新Subversion仓库以获取最新源码的最快捷的方式。这一动作是行之有效的,并在大多数情况下也相当快。警告 ,如果源构件已从仓库删除,工作区也会利用此步骤持续更新源码。另一种选择当然是禁用此选项,若是这样,Hudson将清除工作区并从源码仓库中重新注入。
最后一个选项是指定一个源代码仓库浏览器,诸如FishEye或VisualSVN 。如果您拥有下面列表提供这些产品的一种,就选择适合的浏览器并把它指着自己的源代码仓库地址。
4、指定项目构建的时间间隔
根据上面给出的选项内容进行配置,开始设置了 Build periodically,这个设置应该是不管代码有没有更新都build一次
而 Poll SCM 应该是定时检查是否有新的代码更新,如果更新了就执行build,个人认为
5、指定POM.XML文件,如果项目中有多个POM文件,指定根目录POM文件,MAVEN会自动加载子项目
这里我没有做改变,开始指定说找不到文件,后来发现husdon其实讲svn上的代码下载到了工作目录,我的在
C:/Documents and Settings/user/.hudson/jobs/job_name/workspace 下,而且查找的POM文件通过后台日志得知也是在这里找
所以这里我没有改动,成功了,呵呵
6、配置邮件通知列表(具体人员)
定义一个邮件列表( 多项用空格间隔),以便当构建失败时发送一份通知。当一次作业总是不稳定或者被终止,"Send email for every unstable build "就可以不选,以阻止Hudson不断发送一份已获知条件的邮件通知。
以上配置完成,点击save,创建完成,可在首页中查看项目列表
列表中第一个图标表示本次build的状态,闪烁表示进行中,红色表示失败
第二个图标表示以往build的总体情况,成功和失败的次数按比例分别为,晴天,阴天,雨天,雷阵雨,呵呵,有意思
最右边的图标点击可进行手动build
其他的字段英文比较直观,不做说明
从上面的列表中可以看出,已经build了22次
点击job名称可以进入对项目进行详细信息查看,配置,删除等,如
没什么说的,大家自己研究吧
workspace里就可以找到项目的源码,以及maven打好的包,还可以下载
build失败后,邮件发送也正常
自己了解的暂时就这么多,大家多多交流,:)