`
lovefly_zero
  • 浏览: 387012 次
  • 性别: Icon_minigender_1
  • 来自: 株洲
社区版块
存档分类
最新评论

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

    博客分类:
  • CI
阅读更多

构建轨道

      译自: http://www.javaworld.com/javaworld/jw-12-2008/jw-12-hudson-ci.html 

      Hudson允许您创建多个构建轨道;根据您的软件开发过程,您可能希望依据软件项目创建一个以上的构建轨道。构建轨道是针对一个具体的项目或产品的构建作业,它们都具有独特的配置。区分构建轨道的因素可能是当构建作业在同一个项目中从SCM的不同分支获取源代码;另外,在执行同一份源代码时,不同的轨道也可以处理不同的任务。其中,在具有相同逻辑的软件项目中可能直接影响你创建不同的构建轨道的有:

  • Source control branches: 为了更干净利落地支持多版本源代码的并行开发,许多开发团队会在其源代码控制系统保持了一系列的分支。诸如此类情况,有必要在Hudson中为每个分支基础上的开发建立一个单独的构建轨道。同理也可以建立一些较旧的不活跃的分支,以便把软件的老版本进行归类,这样一来也可以很容易地重建。以下的程序您就可能需要创建单独的分支:
    • 基于主干的构建: 这是个新近的、活跃的、频繁修改的源码基线。
    • 基于发布的构建:  致力于持续发布而单独创建的分支,其中的源码通常是稳定的,但是主干开发可继续转换未来的发布。
    • 基于修复Bug的构建:在主线开发活动中孤立一个Bug以便修复它而单独创建的分支。
    • 实验性构建: 为了在源码基线上测试实验性的想法而单独创建的分支,可能最终不会聚合到主线上的代码。
  • Build job task categories: 为不同源码进行构建可能需要不同的设置或者序列化构建任务,这一般视指定分支的当前状态或者活动情况而定。例如,以下的程序您就可能需要创建单独的分支:
    • 简单建立核查作业,当您不需要考虑构建的稳健性而仅仅想要定期核实代码能被构建,然后产生可用的构件。
    • 构建并核实构建的稳定性可能略低于平常的指标,就从源代码和构建后的构件中构建构件和执行一个完整的测试流程。
    • 发布候选作业,执行完整构建和稳健性测试流程,然后完成一系列任务以提供可交付的发布产品。
    • 执行完整发布作业,当一个候选发布版准备分发并自动地把打包后的构件上传到一个公共的库,以及任何其它必须的任务以便完成一个完整的发布。
  • Deliverable considerations:  即便是完全相同的代码分支和构建任务,您也可能需要采用稍微不同的工具以支持构建。例如,您可能需要根据类Java 1.5和Java 1.4 发布单独的版本。

图29描述了一个源代码控制分支和对应的Hudson构建轨道的合适的逻辑结构。

Source control branches and Hudson build tracks

图29. 源代码控制分支和对应的Hudson构建轨道

        Hudson能够很容易地复制一个现有的作业从而创建一个新的作业。为此,您需要浏览到Hudson的控制面板,单击New Job 链接。输入新工作的名称,然后选择Copy existing job。请注意,当您开始输入时,Hudson将会把现有的作业填充到一个列表框,您可以在此复制符合您所输入的内容。然后单击OK,这样就创建了你的新作业。图30描述了这个过程。

Creating a new job as a copy of an existing job

图 30.  拷贝现有作业从而创建一个新的作业

      一旦您通过这样的方式创建了一个新的作业,除了名字之外它实际上只是您当前作业的副本,所以您会想到通过修改选项从而修改这个新拷贝。例如,您想要:

  • 当某个工作区迁移后更改源代码控制目标分支。
  • 修改构建脚本或者构建脚本目标,并通过Hudson执行。
  • 修改系统属性,并通过Hudson传递到您的Ant脚本里。

使用视图

      当您创建一些构建轨道后,您可能发发现您的控制面板已经成为了一个有点杂乱无章的长串作业列表。一种可取的做法就是,以创建视图的方式重组控制面板。一个面板视图包含一组相关的作业,您可以在控制面板上定义一个单独的标签以供显示。当为相关的作业创建视图组时,您就会理解到实施一致的作业命名约定是多么有益了

      要创建一个视图,单击控制面板中标“+”的小标签。在新的视图页面,输入新组的名称和一个可选的描述信息。Hudson将在当前每个作业配置一个的标记复选框,因此您就可以在视图中包含想要的作业了。

      然而,在我看来还有一种更好的方式来组织作业。单击标记为Use a regular expression to include jobs in the view的复选框,它提供一个正则表达式,在您想要的作业中匹配名称。这对于作业遵循了一致命名约定来说就很方便。您可以按一般的软件项目归类,或者按可能的构建类型作为作业组来配置视图。我已采取了后一种做法,如图31。我在那里建立了一个名为“Release Builds”的视图,其中包括所有包含" release "关键字的作业。

Creating a new dashboard view

图 31.  创建一个新的面板视图

     使用正则表达式归类的办法还有其它优势,就是在新作业被创建后,它们将会按作业名称匹配的方式自动地添加到相关的视图中,但是原来指定方式选择作业的视图则需要手动更新。

     图32显示了基于构建类型的新近组织过的面板。

Dashboard views by build type

图 32.  按构建类型的面板视图

Hudson 插件

     由Hudson类库现有的Hudson功能性扩展和开发者们为Hudson提供的新功能都可以称之为Hudson插件。有些插件可以无缝添加到您的构建过程,然而其它,诸如除CVS和Subversion的SCM插件则需要实现与源代码控制系统的支持,从而有必要使用Hudson完成您的安装。

    目前有许多可用的插件,因此我就不在这里一一列举了,但这些插件总的来说有如下类别:

  • SCM: 除CVS和Subversion外需要实现与源代码控制系统支持的插件。
  • Triggers: 事件监听并触发构建的插件。例如,URL改变触发器将监控一个URL;当地址内容发生改变,这个触发器就将执行一次作业。

  • Build tools: 实现额外构建工具的插件,如MSBuild和Rake。如果您想在Hudson中构建非Java的软件时这些就特别有用。

  • Build wrappers: 通常涉及时执行在受控制的构建过程本身之前和之后事件的插件。例如, VMware插件将在构建之前启动一个客户虚拟机,建立和然后在构建完成后关闭它。这在您可能需要访问VM以执行单元测试的情况下是非常有用的。

  • Build notifiers: 这些插件是做为作业事件发布通知的替代方式--通过Twitter 、IRC、谷歌日历活动等等。

  • Slave launchers and controllers: 这是Hudson中一个非常强大的功能,本文中没有解释从机Hudson实例扮演主机Hudson实例工作。目前在这个类别中只有一个插件:SSH从机插件,它允许从属来管理超过一个SSH的链接。

  • Build reports:  这一系列插件主要是在用您的源代码或者构件进行一些分析的基础上创建有用的报表。例如,Cobertura 插件总是通过您的构建脚本增量统计覆盖率。

  • External site integrations: 以协助Hudson整合与其他应用程序的插件,如Jira或Bugzilla 。

  • Artifact uploaders: 以协助您把构件发布到一些网络终端的插件,如java.net版本库或一个FTP服务器。

  • Page decorators: 为Hudson网页增加一些美化或者有用的装饰物,比如在Hudson中增加谷歌跟踪服务以跟踪其所有网页的谷歌分析插件。

        Hudson 插件管理器允许您安装新的插件,和更新您Hudson服务器上的插件。管理者将连接到联机资料库,检索可用的和已更新的插件。如果您的Hudson服务器无法直接连接到外部资源,您可以从Hudson网站上下载您想要的插件。点击网站上的plugins文件夹,您将看到一个可用的插件列表。这独特的插件文件以.hpi 作为扩展名。一旦您下载了该插件,复制它到Hudson主目录下的插件子目录。(Hudson主目录被称为.Hudson,将在用户的主目录下运行Hudson服务器。)一旦文件被复制,您将需要重新启动Hudson才能使插件生效。使用Hudson插件管理器,单击控制面板上的Manage Hudson链接,然后点击Manage Plugins。插件管理器显示在图33中,它包含四个标签:

  • Updates: 清单中列示了Hudson为某些插件搜索到了可用的更新。列出的每个插件可以被选择并应用更新。
  • Available: 清单中列示了可用于安装(而不是目前已安装的)的所有插件 。列出的每个插件都可以被选择并安装。
  • Install:  清单中列示了已经安装的插件。
  • Advanced: 允许您通过设定HTTP代理的方式使Hudson与在线插件库建立连接。此外,还提供了一个上传设备,可以安装你在Hudson以外已下载的那些插件。

The Hudson plugin manager

图 33.  Hudson 插件管理器

      一旦您想要的插件已经安装或者已更新,Hudson需要重新启动才能使它们生效。如果您使用的服务器是JBoss,请注意,您可以通过修饰JBoss的部署目录下的hudson.war已恢复到您原来的已部署的状态来做到这一点。 (在更新一个文件的时间戳时,修饰是一种很实用的功能。) 这会导致JBoss重新部署Hudson服务器,从而达到重新启动的相同效果。

 

      了解某些类型的构建报告插件的一种重要的概念是,它们并不一定为你产生很精髓的报告。相反,它们歹为产生的增量报告而处理额外一些的任务;在某些情况下,它们会把您产生的报告重新格式化到本地Hudson的综合报告中。 例如, Cobertura插件必须依赖于您的构建脚本必须实现检测您的目标测试类、执行单元测试、并生成详细构建覆盖率报告的一系列工序。接着插件更新正在运行的历史趋势的覆盖率报告,以便使您可以随着时间的推移查看覆盖率的变化。在图34中描述了一个这样的趋势报告的样例。

Historical trends for unit tests, static code analysis, and code coverage

图 34. 单元测试、静态代码分析、代码覆盖的历史趋势

      此外,JUnit测试结果和FindBugs的插件例子将创建Hudson本地报告并显示在作业或构建实例的主页上。 (JUnit插件实际上已经存在并且无需安装。 )图35是通过FindBugs插件产生内置的报告并显示构建实例主页上的一个例子。

FindBugs summary report for a build

图 35. 一次构建后的FindBugs即时报告

     您可以实现您自己的插件,以提供你能想到的几乎任何类型的Hudson扩展。如果您有兴趣这样做,你可以在Hudson  Wiki找到参考、文档和教程(见下面的资源部分)。

总结

     以上就是我介绍的Hudson持续集成服务器。我想你将会发现它是一个很好的软件;多亏它的易于安装和配置,你可以体验一下它的启动和运行的速度有多快。 基于java.net网站有活力的书籍中使用Hudson开发项目的主机情况,Hudson很明显具有越来越多的趋势。我粗略地浏览了邮件列表,表明人们接受了调查并且一贯和迅速的做出了反应,但我必须补充,这段时间我一直在使用它,我也没有遇到任何问题以促使我寻求支持。我希望你会喜欢并探索Hudson--签出资源部分下面的更多文章,下载及相关的链接。

  • 大小: 37.8 KB
  • 大小: 41.7 KB
  • 大小: 18.7 KB
  • 大小: 22.8 KB
  • 大小: 46.9 KB
  • 大小: 58.5 KB
  • 大小: 55.8 KB
2
0
分享到:
评论
8 楼 selina2011874 2013-10-17  
请问Hudson也就是现在的jenkins 能选择对某个版本的原码进行编译构建吗,因为目前我知道的jenkins自动检测原码的更新 只编译新版. 比如原码版本现在是100,也编译过100,而我现在想要它编译版本号是95的原码应该怎么设置
7 楼 lovefly_zero 2011-02-19  
lixingwang718 写道
楼主您好:怎么用hudson返回所有任务的状态,例如:多少成功,多少失败?和原因,望解答,谢谢!


一般情况下Hudson中你需要配置一个邮箱来响应你的构建项目的状态。一旦失败,它会给你配置的邮箱发送失败通知。一般成功的构建任务不会发送通知,只有一种特殊情况,就是上一次构建失败,最新一次构建成功的时候才会发。
它本身没有插件返回所有任务的状态,不过你可以利用其它插件,比如Eclipse和Netbeans的Hudson插件。或者FireFox的Hudson插件(记录RSS)。
具体使用我就不描述了。
6 楼 lixingwang718 2011-02-18  
楼主您好:怎么用hudson返回所有任务的状态,例如:多少成功,多少失败?和原因,望解答,谢谢!
5 楼 lovefly_zero 2011-02-12  
RTC
josema419 写道
您好,请问judson source code management中能不能选择RTC?是否有RTC插件,谢谢
我没有实际用过,你去官网上搜一下吧。
4 楼 josema419 2011-02-12  
您好,请问judson source code management中能不能选择RTC?是否有RTC插件,谢谢
3 楼 czpsailer 2010-05-13  
哦,谢谢!我还发了一个站内短信给你,请教关于Hudson的Findbugs插件相关的,麻烦有空帮忙看看哦。
2 楼 lovefly_zero 2010-05-13  
czpsailer 写道
在控制面板中没有卸载插件的选项,貌似只能禁用一个插件。请问如何卸载插件?

暂时不行,只能手动在主目录\plugins下把相关的文件夹和文件删除。再重启服务器。
1 楼 czpsailer 2010-05-13  
在控制面板中没有卸载插件的选项,貌似只能禁用一个插件。请问如何卸载插件?

相关推荐

Global site tag (gtag.js) - Google Analytics