`
zhaohaolin
  • 浏览: 983805 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

持续集成工具hudson与maven2的结合[转]

阅读更多

之前在网上查过一些资料,都说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脚本、NAntMSBuild

在本文中,我们使用maven2来构建

配置hudson:

在您开始构建软件之前,需要对Hudson进行一些小小的配置。首先,您必须告诉Hudson您的Java JDK和MAVEN2的安装位置。点击http://localhost:8080/Hudson 打开Hudson的主页,单击Manage Hudson 。该网页上附带了下一步,单击Configure System

1.如下图,配置MAVEN_HOME

配置MAVEN_HOME

说明:开始需要点击按钮 add maven,出现下图,将默认的Install automatically去掉,手动指定MAVEN_HOME目录

step_1

可以设置多个MAVEN的版本,在项目中选择

2.配置jdk版本,方法比较类似,可设置多个

配置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、勾选   Discard Old Builds 可以输入保存的历史记录(个人理解)

历史配置

3、配置代码控制服务器,我用的是SVN

svn

在本地搭建的代码控制服务器,不会的同学可以去网上找资料,这里不多讲了,呵呵,我没有启动http服务器,这里直接用的svn,可以找 到,http更改没有问题了,其他协议没有试过,想continuum可支持file协议(默认是关闭的),指向项目的根目录,如果不存在,hudson 也会给出相应的提示,真人性化啊,呵呵

PS:用户名密码暂时还不知道哪里配,知道的同学告诉我啊,因为下载代码并不需要用户名密码(权限控制,修改时需要)

Local module directory 属性是一个可选的和额外的子目录,它将为此次构建创建一个工作区。

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

4、指定项目构建的时间间隔

trigger

根据上面给出的选项内容进行配置,开始设置了 Build periodically,这个设置应该是不管代码有没有更新都build一次

而 Poll SCM 应该是定时检查是否有新的代码更新,如果更新了就执行build,个人认为

5、指定POM.XML文件,如果项目中有多个POM文件,指定根目录POM文件,MAVEN会自动加载子项目

pom

这里我没有做改变,开始指定说找不到文件,后来发现husdon其实讲svn上的代码下载到了工作目录,我的在

C:\Documents and Settings\user\.hudson\jobs\job_name\workspace 下,而且查找的POM文件通过后台日志得知也是在这里找

所以这里我没有改动,成功了,呵呵

6、配置邮件通知列表(具体人员)

send

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

以上配置完成,点击save,创建完成,可在首页中查看项目列表

over

列表中第一个图标表示本次build的状态,闪烁表示进行中,红色表示失败

第二个图标表示以往build的总体情况,成功和失败的次数按比例分别为,晴天,阴天,雨天,雷阵雨,呵呵,有意思

最右边的图标点击可进行手动build

其他的字段英文比较直观,不做说明

从上面的列表中可以看出,已经build了22次

点击job名称可以进入对项目进行详细信息查看,配置,删除等,如

项目详细

没什么说的,大家自己研究吧

workspace里就可以找到项目的源码,以及maven打好的包,还可以下载

build失败后,邮件发送也正常

自己了解的暂时就这么多,大家多多交流,:)

分享到:
评论

相关推荐

    持续集成工具hudson与maven2的结合

    持续集成工具hudson与maven2的结合

    Jenkins持续集成引擎.rar

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...

    jenkins-2.176.2.zip

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...

    jenkins.msi

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...

    jenkins-2.258-1.1.noarch.zip

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...

    jenkins-2.222.4.zip

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...

    jenkins_2.222.4_all.deb

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...

    jenkins.zip

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...

    jenkins_.zip

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...

    Jenkins+Configurations+and+Build+and+Publish.doc

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器...

Global site tag (gtag.js) - Google Analytics