`

用CruiseControl监视你的项目

阅读更多

官方网站:http://cruisecontrol.sourceforge.net/main/configxml.html

 


用CruiseControl监视你的项目

 


现在,我们已经为自己的项目建立了持续集成服务器。让我们来看一下CruiseControl正在对你说些什么。

 

一、项目的状态

首先CruiseControl把项目分成三类,Discontinued,Inactive,及Active。

如果一个项目是Discontinued,表示CruiseControl可以找到该项目的日志文件,但在配置文件(Config.xml)中并没有该文件。所以CruiseControl不会去构建它,但你可以看到这个项目过去构建的历史信息。如果想把这个项目从CruiseControl中删除,只有把该项目的日志目录删除才行。如果该项目名为"vcdstore",目录当该是${CruiseContor.Home}/logs/vcdstore。

如果一个项目是Inactive,表示CruiseControl在配置文件(Config.xml)中发现了该项目,但是没有发现关于这个项目的任何历史信息,即在CruiseControl的日志目录中还没有该项目的日志文件,或日志文件被人为删除了。CruiseControl会根据配置信息对这个项目进行检查新版本并进行构建。当第一次构建完成后,CruiseControl就会生成日志,这个项目状态就会转为Active了。

如果一个项目是Active,表示CruiseControl即可以找到该项目的日志文件,又在配置文件(Config.xml)中可以发现它。此时,这个项目可能是构建成功,也可能是构建失败,还可能是构建中。

二、Dashboard

你可以通过 http://localhost:8080/dashboard 访问Dashboard。

Dashboard主要有四个页面,它们分别是Dashboard,Builds,Build Details和Administatiorn。

(1) Dashboard

你可以在Dashboard上看到所有项目的状态,红色方块表示该项目最近一次构建是失败的。绿色方块表示该项目最近一次构建是成功的。灰色方块表示该项目可能是Inactive的,也可能是Discontinued。
当把鼠标放在小方块上时,会显示该项目的主要信息。点击小方块,会进入Build Details页面。

 

 
(2) Builds

你可以在Builds页面上以列表的方式看到所有项目的状态,点击每个列表,可以进行Build Details页面。

如果你将ForceBuild配置为true,在列表右侧有一个按钮,你可以强迫该项目进行构建,而不必等到其下一次检查,也不必等到它有版本变化。

 


(3) Build Details

此页面会列出该项目某次构建的详细信息,包括与上次构建相比有哪些变化,测试结果是什么,详细的日志输出,如果构建成功的话,在配置文件(config.xml)中配置的Artifacts也会在名为Artifacts的tab页上看到。

右侧的列表是该项目所有的构建列表,点击其中一个构建,你就可以得到该次构建的详细信息。

 


(4) Administration

该页面你可以看到About和Configuration两个子标签。

在About子标签中,你可以看到CruiseControl所用的环境信息,如CruiseControl的版本号、所用的操作系统和JDK版本等。

 


在Administration子标签中,你可以看到CruiseControl的Dashboard-config.xml文件内容。在该版本中,还不支持修改,也移除了"Add Project"按钮。

 


三、CruiseControl Reporting

你也可以通过链接http://localhost:8080/ 来访问CruiseControl的Old Reporting。

 


点击项目名称,可以看到详细内容。

 


四、CruiseControl JMX控制台

你也可以通过链接http://localhost:8000/来访问CruiseControl的JMX控制台。

 


在控制台上点击项目名称(如connectfour),可以修改项目配置,暂停/恢复项目构建等。

 

小贴士:

(1) 以上的链接均以不修改CruiseControl默认配置为基础。

(2) 接下来,我们会介绍如何通过Build Grid来推展我们的CruiseControl构建能力。

 


使用CruiseControl创建你的Build Grid

 


如果您一直跟着这个Thread,那么现在你应该已经可以使用CruiseControl来进行持续集成了。如果你有很多项目需要持续集成的话,可能在同一时刻会有很多项目排队等待构建的现象,以至于使各项目团队无法得到及时的反馈,此时一个集成服务器就不够了。下面我们就来扩展我们的Build Grid吧。


--------------------------------------------------------------------------------

一、前提条件与假设

根据前面的介绍,你的第一台持续集成服务器已经可以正常运行了。这里列出如下假设,以方便后续描述。

(1) 首台持续集成服务器IP地址为:192.168.1.6,hostname为CI_One。

(2) 在首台持续集成服务器上:

CruiseControl的根目录是:C:/CruiseControl,今后用${CC.HOME}表示。

CruiseControl的Projects目录是:C:/CruiseControl/Proects,今后用${CC.Projects}表示。

CruiseControl的Logs目录是:C:/CruiseControl/Logs,今后用${CC.Logs}表示。

CruiseControl的Artifacts目录是:C:/CruiseControl/Artifacts,今后用${CC.Artifacts}表示。


(3) 你将在IP地址为:192.168.1.8,hostname为CI_Two的机器上部署第二个持续集成服务器。

(4) 把名为CI_One的机器做为主服务器,即把CI_Two上构建的日志(Logs)和结果(Artifacts)放发布到CI_One的${CC.Logs}和${CC.Artifacts}中。

(5) 你将在CI_Two上构建名为CI_TWO_connectFour的项目,它也使用SVN作为项目的SCM。

二、准备工作

(1) 将CI_One上的${CC.Logs}和${CC.Artifacts}设为共享目录,保证CI_Two对这两个目录可写。

(2)可以在CI_Two上,把CI_One的${CC.Logs}和${CC.Artifacts}两个目录分别映射成两个网络驱动器,名字为别为Z:/和Y:/。

(3) 将CI_One上的CruiseControl,整个拷贝到CI_Two上的C盘根目录下,即对于CI_Two来说,CruiseControl的工作目录是C:/CruiseControl。(当然,也可以把一个你编译后生成的CruiseControl拷贝过来。)

(4) 在CI_Two的${CC.Projects}目录下,建立名为CI_TWO_connectFour的目录,把SVN中的源代码checkout到这个目录下,并确保build.xml文件在这个目录下。

三、第二台持续集成服务器的配置工作

以下所有工作全部发生在名为CI_Two这台机器上。

(4) 修改配置文件config.xml,如下所示:

<cruisecontrol>
    <project name="CI_TWO_connectFour">

        <listeners>
            <currentbuildstatuslistener file="Z:/${project.name}/status.txt"/>
                  <!-- 请注意这里的z: -->
        </listeners>

        <bootstrappers>
            <svnbootstrapper localWorkingCopy="projects/${project.name}" />
        </bootstrappers>

        <modificationset quietperiod="30">
            <svn localWorkingCopy="projects/${project.name}"/>
        </modificationset>

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

        <log dir="Z:/">
                <!-- 请注意这里的z: -->
            <merge dir="projects/${project.name}/target/test-results"/>
        </log>

        <publishers>
            <onsuccess>
                <artifactspublisher dest="Y:/${project.name}" file="projects/${project.name}/target/connectfour.jar"/>
            <!-- 请注意这里的Y: -->
                </onsuccess>
        </publishers>

    </project>
</cruisecontrol>

(5) 修改启动脚本

打开CruiseControl.bat文件,找到下面这行代码:

set EXEC=%JAVA_PATH% %CC_OPTS% -Djavax.management.builder.initial=mx4j.server.MX4JMBeanServerBuilder -jar "%LAUNCHER%" %* -jmxport 8000 -
webport 8080 -rmiport 1099

将下面这段代码:


-dashboardrul http://192.168.1.6:8080/dashboard加入到上面的代码后,最后的代码如下: set EXEC=%JAVA_PATH% %CC_OPTS% -Djavax.management.builder.initial=mx4j.server.MX4JMBeanServerBuilder -jar "%LAUNCHER%" %* -jmxport 8000 -
webport 8080 -rmiport 1099 -dashboardrul http://192.168.1.6:8080/dashboard

保存该文件。

四、运行Build Grid

(1) 运行${CC.Home}中的CruiseControl.bat,启动CI_One上的CruiseControl。

(2) 运行${CC.Home}中的CruiseControl.bat,启动CI_Two上的CruiseControl。

五、访问你的Build Grid

(1) 在任何一台可以访问CI_One的机器上,通过浏览器访问下面的网址http://192.168.1.6:8080/dashboard 来查看你构建的项目。当然,使用hostname也可以。因为CruiseControl内置了一个Jetty应用服务器,版本是6.1。

(2) 你同样可以使用http://CI_One:8080/ 访问CI_One的Old Reporting 页面,用http://CI_Two:8080/访问CI_Two的Old Reporting。不过你会发现,你在CI_Two上配置的项目状态在CI_One的Old Reporting页面都显示为?????。这就是Old Reporting 的局限性。

小贴士:

(1) 要保证所有项目(无论在哪台机器上构建)的项目名都不相同,否则,CruiseControl的DashBoard只会选取其中的一个同名项目,忽略其它的同名项目。

(2) 在CI_Two中启动脚本中,一定要正确填写DashBoardURL参数,确保是CI_One的地址和端口。

(3) 如果项目的log文件比较大,或者构建时使用内存较多,在启动脚本中,可以通过增加JAVA命令行参数,扩大JVM的内存,以免出现OutOfMemory错误。

 


CruiseControl定时触发构建

 


CruiseControl倾向于通过源码变化来自动触发构建,但仍提供了几种方式来定时触发构建,以达到nightly building的效果。

在开始配置之前,先说明一下config.xml文件中Project元素的相关属性。


Project 元素对应你的一个需要构建的项目。其中:
name为其指定名称。
buildafterfailed 表示本次构建失败,是否要求CruiseControl继续下一次构建。
当设置为true时,表示如果本次构建失败,即使没有任何人检入代码,间隔时间一到,CruiseControl也构建它。
当设置为false时,表求如果本次构建失败,如果没有任何人检入代码,CruiseControl就不会再次构建它。
其默认值是true。
requireModification表示是否需要源文件发生变化才进行构建。
当设置为true时,CruiseControl会根据modificationset元素的设置对源文件进行检查。
当设置为false时,CruiseControl仅根据Schedule元素的设置进行定时构建。
其默认值是true。
forceOnly表示是否只能手工构建。
当设置为true时,用户只能通过手工启动该项目的构建。
当设置为false时,表示即可以根据条件自动构建,用户也可以通过手工构建(前提dashboard-config.xml中的配置必须是true)。
其默认值是false。

为了达到定时构建的目的,首先要将Config.xml文件中该项目Project元素的requireModification属性设置为false。

一、每小时触发一次
设置Schedule元素的interval属性值为3600,即表示每小时会计划构建一次,由于requireModification已经设置为false,所以无论如何,CruiseControl都会构建。例如:
        <schedule interval="3600">
            <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" />
        </schedule>

二、每天触发一次
       主要使用Schedule元素中各种构建器(如ant,nant,rake等)的time属性。time属性的格式为hhmm,例如2300就表示晚上十一点。
        <schedule>
            <ant anthome="xxxxxx" buildfile="projects/${project.name}/xxxxx.xml" time="2300"/>
        </schedule>   
当然,也可以使用pause子元素来指定在某段时间内不构建,如白天上班时间不构建,其它时间每隔一小时构建一次可用如下配置表示:
        <schedule interval="3600">
            <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml"/>
            <pause starttime="0800" endtime="1800"/>
        </schedule>

三、每周触发一次
       主要使用Schedule元素中各种构建器(如ant,nant,rake等)的time及day属性。day属性值为英文星期几且大小写不敏感,如sunday。
        <schedule>
            <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml"  day="Sunday"/>
        </schedule>如果想指定具体时间,可以同时使用time属性,例如星期日的晚上十一点可以表示如下:
        <schedule>
            <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" time="2300" day="Sunday"/>
        </schedule>
需要说明的是,如果项目的构建时间长于指定的时间间隔,则构建次数会少于理想次数。例如设置每小时构建一次,但是每次构建要花费一个半小时。
另外,day属性还不支持多天,即不支持day="Monday Wednesday Friday"这种设置方式。如果想达到每隔一天构建一次的话,只能使用Schedule的interval属性。

个人建议,CruiseControl最好将触发事件写在各种Builder之外,而当前情况是:如果该Builder不支持time和day属性(如exec),可能就无法象上面所说的那样配置了。

分享到:
评论

相关推荐

    CruiseControl使用指南.rar

    2. **CruiseControl监视你的项目**:CruiseControl能够实时监控项目的源代码库,一旦检测到变更,它会自动触发构建。"CruiseControl step by step(4)"系列文章详细讲述了如何设置这种监视机制,帮助开发者及时发现和...

    CruiseControl使用总结

    通常,你需要下载CruiseControl的二进制包,然后根据项目需求配置XML配置文件。配置文件包含了项目源码位置、构建命令、测试脚本、邮件通知等信息。例如,你可以设置CruiseControl在每次构建后发送邮件通知,以便...

    CruiseControl + ANT +SVN

    CruiseControl 是一个开源的持续集成服务器,它监视源代码仓库的变化,一旦检测到更新,就会自动触发构建过程。通过持续集成,开发者可以及时发现并解决代码冲突和错误,减少集成难题。CruiseControl 提供了丰富的...

    cRuisecontrolxxx

    3. **使用XML配置**: `config.xml`是CruiseControl的核心配置文件,它定义了项目、构建工具、触发器等。由于文件可能会变得复杂,可以创建一个更简单的XML文档(如`meta-config.xml`),然后使用XSLT样式表(如`meta...

    CruiseControl.NET:用于.NET平台的自动化连续集成服务器-开源

    作为CruiseControl for Java的C#版本,CruiseControl.NET继承了其核心理念,即通过持续地、自动地构建项目来确保代码质量,并尽早发现潜在问题。 ### 持续集成概念 持续集成是一种软件开发实践,要求开发人员频繁...

    Cruisecontrol Config and Monitor Tool-开源

    通过监视源代码仓库的变更,CruiseControl可以自动触发构建流程,如果构建成功,还可以执行单元测试和集成测试,确保代码质量。 在监控方面,CruiseControl提供了一个Web界面,展示当前的构建状态、历史记录、失败...

    CCTray 项目连编

    CCTray是一款强大的持续集成工具,它主要用于监视CruiseControl.NET服务器上的项目构建状态。在软件开发过程中,尤其是在敏捷开发环境中,持续集成是至关重要的实践之一。CCTray的使用可以极大地提高团队的效率,...

    持续集成与自动化测试

    3. **持续集成服务器(CI Server)**:如CruiseControl和Continuum,它们自动化构建流程,包括监视代码库的变更、触发构建以及报告结果。 4. **应用服务器(App server)**:如Apache Tomcat和JBoss,它们用于部署和...

    DailyBuild全攻略

    - **CruiseControl.NET** 监视VSS中的代码变更。 - 当检测到变更时,CC.NET 调用 Nant 执行构建过程。 - Nant 从VSS获取最新代码,编译项目,生成DLL或EXE。 - 编译后的程序集通过Nunit 进行单元测试,生成XML测试...

    ccmenu:CCMenu是一个Mac应用程序,用于监视连续集成服务器

    它作为CruiseControl项目的一部分开始,该项目构建了第一个连续集成服务器。 有关文档和支持,请访问 。 要下载并安装CCMenu,请访问 。 如果您是CI服务器的实施者,或者需要有关为特定服务器设置CCMenu的帮助,请...

    CCNET配置文件打包

    **CCNET(CruiseControl.NET)** CCNET是一款开源的持续集成服务器,主要用于自动化构建、测试和部署过程。它提供了一个灵活的配置机制,可以与各种版本控制系统(如SVN)、构建工具(如MSBuild)、测试框架和通知...

    buildnotify:基于系统任务栏的构建状态通知应用程序,用于cctray.xml提要

    【buildnotify】是一款专为开发者设计的系统任务栏构建状态通知工具,它通过解析和监控CCTray(CruiseControl)或类似CI服务器(如Jenkins、CircleCI)的XML提要,实现实时更新项目的构建状态。这个应用程序是用...

    nevergreen:具有态度的构建监视器

    Nevergreen是具有态度的构建监视器。 通过快速清晰的反馈持续交付。 您的构建应始终为绿色。 Nevergreen理解这一点,仅向您显示失败或正在构建的项目 Nevergreen使用您的本地浏览器来存储配置。 您只需要运行一次...

    C#开源资源大汇总 几套非常好的开源资料

    - **BuildStudio**:自动化构建工具,支持CruiseControl.NET。 以上提到的资源涵盖了从AOP到各种实用工具的不同方面,为C#开发者提供了丰富的选择。根据项目的具体需求和技术栈,可以选择最适合自己的工具来提高...

Global site tag (gtag.js) - Google Analytics