注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

持续集成工具CruiseControl研究  

来自优昙华院   2012-12-03 20:29:42|  分类: 流程相关 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一.介绍

CruiseControl是一个开源的持续集成工具,主要提供了基于版本管理工具(如 CVSVSSSVN)感知变化或每天定时的持续集成,并提供持续集成报告、 Email 等等方式通知相关负责人,其要求是需要进行日构建的项目已编写好全自动的项目编译脚本(可基于 Maven Ant)。

CruiseControl 主要分3个模块:

1. build loops:后台功能,CruiseControl的核心,定期调度CruiseControl中定义的要去build的项目,执行build

2. dashboard:一个web应用中的前端模块,使用者通过这个web页面可以获取到当前CruiseControl中的项目的build的状态等一些基础信息。

3. jsp reporting:一个web应用中的前端模块,使用者在这个模块的页面中可以看到先前每个project build之后生成的详细信息。

二.运行原理

CruiseControl的原理是首先在config文件中定义要持续集成的project,之后CruiseControl每隔一段时间就去轮询config文件,根据config文件中最新的配置去调用build工具去执行版本构建任务,这时候CruiseControl就会记录下版本构建的结果,构建过程中生成的日志,根据构建结果来执行其它操作,如给相关人员发送邮件等。

三.搭建环境

1.可以在CruiseControl的官网上下载最新版本的压缩包(目前最新是2.8.4

http://sourceforge.net/projects/cruisecontrol/files/

这边是在windows7下搭建的,且首先必须安装JDK并配置环境变量,这里不再叙述

注意:默认情况下,CruiseControl启动后要占用操作机器上的8000端口给jmx用,8080端口供web访问用,1099端口给rmi用。所以需要提前确认这些端口没有被系统中其他程序占用。当然也可以直接去修改启动的bat或者sh文件中的端口号。

2. 下载完cruisecontrol-bin-2.8.4.zip解压后运行cruisecontrol.bat即可(这个是免安装版的),在运行的窗口中也可以查看编译的情况。另外注意这个窗口不能关闭。

验证环境:运行成功后访问http://localhost:8080/dashboard,(端口号根据实际设置而定)页面能显示connectfour这个自带的project就说明搭建成功。

四.部署自己的工程

1.首先构建一个工程,名称为test,放在CruiseControlprojects文件夹下,如:D:\software\cruisecontrol-bin-2.8.4\projects

2.创建一个java类,如

public class Test{

public static void main(String[] args){

System.out.println("yoooooo");

}

3. 构建ant编译时所用的build.xml配置文件

<project name="test" default="all" basedir=".">

<property file="build.properties"/>

<path id="project.classpath">

<pathelement location="${svnjavahl.jar}" />

<pathelement location="${svnant.jar}" />

<pathelement location="${svnClientAdapter.jar}" />

</path>

<target name="all" depends="clean, compile, sleep, jar"/>

<target name="clean">

<delete dir="target" quiet="true" />

</target>

<target name="compile" >

<mkdir dir="target/classes"/>

<javac srcdir="src" destdir="target/classes">

<classpath>

<pathelement location="build/lib/${app.name}.jar" />

<pathelement path="${basedir}/lib" />

</classpath>

</javac>

</target>

<target name="sleep">

<echo message="Sleeping for a while so you can see the build in the new dashboard" />

<sleep seconds="5" />

</target>

<target name="jar" depends="compile">

<jar jarfile="target/test.jar" basedir="target/classes"/>

</target>

</project>

4.将这个工程加入到CruiseControl的配置文件config.xml中,添加如下代码

<project name="test">

<!--监听项目状态的变化 -->

    <listeners>

        <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>

</listeners>

    <bootstrappers>

        <antbootstrapper anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/ build.xml" target="clean" />

    </bootstrappers>

    <modificationset quietperiod="30">

        <filesystem folder="projects/${project.name}"/>

</modificationset>

<!-- 设定每隔interval秒,CruiseControl去检查并执行一次构建 -->

    <schedule interval="60">

        <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml"/>

    </schedule>

    <log>

        <merge dir="projects/${project.name}/target/test-results"/>

</log>

<!-- 发布构建结果 -->

    <publishers>

        <onsuccess>

            <artifactspublisher

dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/>

        </onsuccess>

</publishers>

</project>

其中,schedule interval="60",这边可以设置轮询时间(s


构建的实例演示:

访问http://localhost:8080/dashboard,编译成功,显示为绿色,鼠标悬停可以查看状态和信息:

持续集成工具CruiseControl研究 - 网易杭州QA - 网易杭州 QA Team

点击可以查看编译日志等详细信息:

持续集成工具CruiseControl研究 - 网易杭州QA - 网易杭州 QA Team

最近一次编译失败则显示为红色:

持续集成工具CruiseControl研究 - 网易杭州QA - 网易杭州 QA Team

点击可以查看详细信息:

持续集成工具CruiseControl研究 - 网易杭州QA - 网易杭州 QA Team

http://localhost:8080/cruisecontrol/下可以显示各个工程的历史编译记录和状态等:

持续集成工具CruiseControl研究 - 网易杭州QA - 网易杭州 QA Team
另外这边总结并列出了配置文件Config.xml的常用的属性,方便根据自身项目情况进行设置:

<cruisecontrol>

配置文件的根元素,它可以拥有一个或多个 <project> 子元素。

<project>

包括一个完整的 build 任务,包括检查配置管理库是否有新的修改,构建项目并发布项目构建结果。它告诉 CruiseControl 构建什么,何时构建,如何构建以及如何发布构建报告。它有一个必需的属性 name

<project> 元素的子元素包括 <listeners> <bootstrappers> <modificationset> <schedule> <log> <publishers> <dateformat> <plugin> ,其中 <modificationset> <schedule> 是必需的元素。

<listeners>

它的子元素 <currentbuildstatuslistener> 记录了当前 build 的状态和最近一次状态改变的时间。

<bootstrappers>

启动任务 Plugin 的容器,用于定义构建任务启动前需要执行的任务。常用的 Plugin 包括:

1. <currentbuildstatusbootstrapper> ,定义一个 CruiseControl 的构建状态信息文件。 CruiseControl Build Result JSP 从该文件读取状态信息并显示在页面上。属性 file 用于指定构建状态文件目录和文件名。

2. <clearcasebootstrapper> ,用于在项目构建开始前从 ClearCase 服务器上 update 指定的文件。通常可以用于更新项目的构建脚本。属性 viewpath 指定本地工作目录,属性 file 指定需要 update 的文件名,相对于属性 viewpath 指定的目录。

<modificationset>

用于告诉 CruiseControl 是否需要构建项目,即配置管理库的代码是否存在更新。监控本地工作目录,如果在下面的目录中发生变化则自动执行下面的构建,没有变化则不再执行下面的构建工作。它拥有三个可选属性 requiremodification quietperiod ignoreFiles

属性 requiremodification 告诉 CruiseControl ,在配置管理库没有代码更新的情况下,是否需要构建。缺省为 "true" ,即没有更新则无须进行构建。属性 quietperiod 告诉 CruiseControl ,最新一次代码提交后 CruiseControl 需要等待的时间(秒)。用于防止 CruiseControl 在开发人员提交代码时进行项目构建。缺省为 "60" 秒。

<schedule>

告诉 CruiseControl 每隔多长时间(秒)启动一次构建任务。它有一个可选的属性 interval ,用于定义以秒为单位的时间间隔。缺省为 "300" 秒。

<log>

设定 CruiseControl 日志文件的存放目录,并通过 <merge> 子元素指定合并什么样的 XML 文件(构建过程中产生的文件)到 CruiseControl 的日志文件中。<merge> 子元素的 pattern 属性定义匹配的文件名模式,缺省为 ".xml" dir 属性用于指定一个目录,这个目录下所有匹配模式的文件将合并到 CruiseControl 的日志文件中。

<publishers>

用于指定构建任务结束后, CruiseControl 如何发布项目构建结果。项目构建结果的发布方式可以是 Email ,网页,复制代码库到指定的目录,或是发布代码库到 FTP 服务器。

  评论这张
 
阅读(1039)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016