使用Hudson进行持续集成

持续集成已成为当前许多软件开发团队在整个软件开发生命周期内侧重于保证代码质量的常见做法。Hudson 一个现在非常流行的开源CI服务器。持续集成(CI)是一种实践,旨在缓和和稳固软件的构建过程。CI能够帮助您的开发团队应对如下挑战:

  • 软件构建自动化:使用CI,您只要按一下按钮,它会依照预先制定的时间表,或者响应某一特定事件,就开始进行一次构建过程。如果您想取出源码并生成构件。
  • 持续自动的构建检查CI系统能够设定成持续地对新增或修改后签入的源代码执行构建,也就是说,当软件开发团队需要周期性的检查新增或修改后的代码时,CI系统会不断要求确认这些新代码是否破坏了原有软件的成功构建。这减少了开发者们在手动检查彼此相互依存的代码中变化情况需要花费的时间和精力。
  • 持续自动的构建测试:这个是构建检查的扩展部分,这个过程将确保当新增或修改代码时不会导致预先制定的一套测试方案在构建构件后失败。构建测试和构建检查一样,失败都会触发通知(Email,RSS等等)给相关的当事人,告知对方一次构建或者一些测试失败了。
  • 构件生成后续过程的自动化 :一旦自动化检查和测试的构建已经完成,一个软件构件的构建周期中可能也需要一些额外的任务,诸如生成文档、打包软件、部署构件到一个运行环境或者软件仓库。只有这样,构件才能更迅速地提供给用户使用。

        实现一个CI服务器你需要的最低要求是,一个易获取的源代码仓库(包含源代码),一套构建脚本和流程和一系列围绕构件构建的可执行测试。图1概括了CI系统的基本结构。


使用Hudson进行持续集成
 

1. CI系统的基本结

    该系统的各个组成部分将按如下顺序来发挥作用:

  1. 开发者检查新增和修改到源代码仓库后的代码。
  2. CI服务器会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时,它将把源代码仓库的源码存放到对应的工作区,在哪里构建就执行到哪个目录下。
  3. CI服务器会在新近创建或者更新的工作区内执行构建过程。
  4. 一旦构建完成,CI服务器就会在一个新的构件中选择性地执行原先定义的一套测试。如果构建失败,相关责任人将会通过电子邮件、即时短信或者其他的方式获取到(失败)通知。
  5. 如果构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器) /或存储为软件仓库中的一个新版本。这个如软件仓库可以是CI服务器的一部分,也可以是一个外部的仓库,诸如一个文件服务器或者像Java.netSourceForge分发的一个有效网址。源代码仓库和构件仓库是可以分开的,实际上它可以利用一些根本没有包含任何源代码控制系统(CVSSVNCSS等等)CI服务器。
  6. CI服务器通常会通过某种控制台来进行项目的配置和调试,并且根据请求响应相应的操作,诸如即时构建、生成报告,或者检索构件。

1.1  Hudson: 持续集成服务器 

  持续集成在过去几年因为它的逐渐成熟而颇受欢迎,今天您有不少的CI服务器可供选择,包括商业的和开源的。我个人推荐Hudson

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

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)

在这里,我将使用SubversionJava.net源代码仓库,所以这些插件您都不必安装了。 

Hudson是一个存放在Java.net免费的和开放源代码的软件产品。最初是由Kohsuke Kawaguchi编写的,他是一名Sun工程师,在20052月宣布释放了他的博客。

以下的一些理由将告诉您我为什么喜欢Hudson,为什么我会推荐给您,除非您有任何不寻常的需求:

  • 这是迄今为止我使用过的所有CI产品在安装和配置上中最简单的(CI产品)
  • 基于Web的用户界面非常友好、直观和灵活,在许多情况下,还对需单独配置的部分提供了基于AJAX的即时反馈。
  • Hudson是基于java开发的(如果你是一个Java开发人员,这是非常有用的),但它不仅限于构建基于Java的软件。
  • Hudson本身是一个很简洁的组件,但它提供了一组很明确和可扩展APIHudson组件。这批组成一个大的类库的Hudson组件反过来又丰富了Hudson的功能;它们都是开源的,而且它们可以直接通过Hudson的控制台来进行安装。

 

构建后操作:

 


使用Hudson进行持续集成
 

 

Exec command:

 

source /home/mallapp/.bash_profile

export BUILD_ID=test_manager

 

if [ `ps auxwwww|grep tomcat-ztb-manager|grep -v grep|wc -l` -gt 0 ]  

then  

for pid in `ps auxwww|grep tomcat-ztb-manager|grep -v grep|tr -s ' '|cut -d ' ' -f2`  

do  

kill -9 $pid 2>&1 > /dev/null  

done  

fi

 

rm -rf /opt/tomcat-ztb-manager/work/Catalina*  

rm -rf /opt/tomcat-ztb-manager/webapps/*  

cp /home/mallapp/nfs/deploy/webapps/ztbManager.war /opt/tomcat-ztb-manager/webapps/

 

/opt/tomcat-ztb-manager/bin/startup.sh