• 搭建你的持续集成服务器 CruiseControl


    分类: CruiseControl 8923人阅读 评论(3) 收藏 举报

    CruiseControl是CI服务器的老者,诞生已是多年,在许多方面,CruiseControl服务器已经成为持续集成实践的同义 词。而现在,CruiseControl已发展成为一个家族式系统,包括CruiseControl.java、CruiseControl.net、 CruiseControl.ruby等适应不同语言环境的实现,其强大的插件和扩展能力也是诸多同类系统无法比你的。而在这里,我只介绍该家族的本家 CruiseControl.java,即CruiseControl。CruiseControl是一个不错的持续集成服务器,不过国内社区的普遍反应 是:它的配置太麻烦,无从下手。从本篇文章开始,我将逐步介绍CruiseControl的环境搭建与配置,以及持续集成中的一些实践。我们将从最简单的 使用方式(stand-alone)开始,以便您可以快速开始您的持续集成之旅,而不必面对“千奇百怪”的问题。
    好!先让我们简单搭建个持续集成服务器再说吧


    一、我使用的CruiseControl版本

    1. CruiseControl是一个java开源项目,我将以它最近的一个分支版本来介绍它的使用。CruiseControl最近发布的版本是V2.7.1。这个分支版本就是在V2.7.1基础之上。
    2. 这个分支版本包含一个Dashboard,可以方便地看到各项目的构建状态。
    3. 这个分支版本当然还支持多个Build Loop,你可以在多个机器上部署独立的Build Loop,从而建立你自己的Build Grid。

    二、得到CruiseControl的分支版本

        要得到这个分支版本,你可以使用subversion不用任何密码从CruiseControl的Repository中检出。命令如下:
    svn checkout https://cruisecontrol.svn.sourceforge.net/svnroot/cruisecontrol/branches/cce/cruisecontrol/

    三、构建CruiseControl

          
    0.    你机器上至少要安装有JAVA 1.4,并在环境变量中设置有JAVA_HOME,并把java/bin加入到path中。CruiseControl自带了ANT,所以不用事先安装。

    1. 从源代码中构建CruiseControl

           如果从源码中构建CruiseControl,要确保你的机器可以访问互联网。因为构建过程中要检查一些license。另外,最好有SVN 客户端软件,因为在构建时,它会用到javahl。
           在刚刚checkout出来的CruiseControl目录下,有一个批处理文件,名为release.bat。运行这个批处理文件,你会在 target目录下发现一个压缩文件,名这cruisecontrol-bin-2.7.2-dev.zip。将其解压到一个目录,我们这里解压到C盘根 目录下。解压后,目录结构如下:
    目录结构
          2.  直接使用已构建完成的CruiseControl 
    如果你不想做这一步,也可以在binaryrelease目录下发现解压后的文件,把它们拷贝到相应的目录下也可以。

    四、运行CruiseControl

       CruiseControl可以运行在多种应用服务器中,当然,它自己也捆绑了一个开源应用服务器,那就是Jetty 6。为了尽快建立我们的环境,我们这里暂时使用它自己捆绑的Jetty,快速开始我们的持续集成之旅。
       直接运行CruiseControl目录下的CruiseControl.bat,它会自行启动Jetty6,当从Console中看到它启动完毕后,你 就可以在浏览器中访问http://localhost:8080/dashboard,此时你会看到一个名为connectFour的示例项目在 Dashboard上显示了。

    Build Dashboard

    (如果你足够快的话,你会发现Dashboard 上的小方块是从灰色变成深绿色的。为什么呢?我们以后再说。)
    “绿色”表示该项目构建通过。如果要是有多个项目的话,应该看到多个小方块。

    点击“Builds” Tab页,就到了 Builds 页。这一页会以列表的方式显示所有的项目。当前只有一个项目,所以在列表中只有一行,如下图所示:
    Builds Page
     在该页面上点击某个项目时,会打开Build Detail页, 显示该项目最近一次Build的信息。页面右侧是该项目所有历史构建信息。你会发现,这时connectFour项目有两个构建历史版本,一个是刚刚构建 完成的,另一个是两年前的构建。这些信息是来自于CruiseControl对该项目的日志文件。此时,点击这两个构建结果中的任何一个,都会打开该次构 建的Build Detail页面,显示相关的构建历史信息。如下图所示:
    Build Detail

    CruiseControl的配置文件的确了比较复杂,一方面是因为:它太灵活,太想完成你想达到的任何效果了。另一方面就是:它在文档化方面的确很落后。你只能在用户组中找答案。(不过,这也是学习的一个途径。如果你了解开源的话,你就会习惯于在用户组中找答案啦。)


    再了解配置文件之前,让我们先定义一下我们可能会用到的术语。

    1. 工作目录(也就是CruiseControl的工作目录):是指启动CruiseControl的脚本目录。在Stand-alone情况下,就是文件cruisecontrol.bat所在的目录。如果你把它部署到了应用服务器中,那一般就指bin目录了。
           2.  Log 目录:就是CruiseControl存储所有构建项目日志信息的目录,默认值为工作目录下名为logs目录。
           3. Projects目录:就是CruiseControl存储所有构建项目源代码的目录,默认值为工作目录下名为projects目录。

    一、配置文件及其正确位置

          配置文件包括两个,一个名为config.xml,另一个名为dashboard-config.xml。默认情况下,这两个文件和cruisecontrol.bat在同一下目录下,即工作目录
         如果在配置文件中,任何路径前面如果没有“/”的话,那就是相对于工作目录的。
      
        
          另外,CruiseControl是可以改变他们的位置的,但建议在没有深入了解CruiseControl时,不要试图改变它们,因为我们的目标是让CruiseControl在最短的时间里为你创建价值。

    二、Config.xml 文件

    <cruisecontrol>
        
    <project name="connectfour"--这里的name应该和你在projects目录下的项目名完全一致。

            
    <listeners>          --用于监听项目状态的变化(指building,passed等)
                
    <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>   --这里的${project.name}
            
    </listeners>                                                                                                                 是指“connectfour”

            
    <bootstrappers>        --用于CruiseControl从Repository更新代码
                
    <svnbootstrapper localWorkingCopy="projects/${project.name}" />
            
    </bootstrappers>

            
    <modificationset quietperiod="30">      --用于监听在quietperiod秒内Repository是否变化
                
    <svn localWorkingCopy="projects/${project.name}"/>
            
    </modificationset>

            
    <schedule interval="300"--用于每隔interval秒,CruiseControl去检查并计划一次构建
                
    <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml"/>
            
    </schedule>

            
    <log--用于得到并保存log文件。默认情况下,将放在projects/${project.name}的目录下
                
    <merge dir="projects/${project.name}/target/test-results"/> --用于将Build中生成的结果合并
            
    </log>                                                                                                            到log文件中

            
    <publishers--用于将构建的结果(如二进制文件)发布到指定的位置
                
    <onsuccess--决定在构建成功的情况下,发布哪些内容
                    
    <artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/>
                
    </onsuccess>
            
    </publishers>

        
    </project>
    </cruisecontrol>

    三、dashboard-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!--
    /********************************************************************************
     这里省略了一些声明 :)
     ********************************************************************************/
     
    -->
     
    <dashboard>
         
    <buildloop
            
    logsdir=""        --这里指定logs目录,一定要与config.xml文件中一致,否则你会有麻烦。
                                                    如果为空串,则默认为工作目录下的logs目录。
                  artifactsdir
    ="" />  --这里指定artifacts目录,一定要与config.xml文件中一致
                                                      
    如果为空串,则默认为工作目录下的artifacts目录。
        <features allowforcebuild=""/>  --是否可以在Dashboard上强制构建(force build)
        
    <trackingtool projectname="" baseurl="" keywords=""/>  --这是用于与Mingle的集成
         
    <subtabs>   --在这里,你可以自己扩展你自己的subtab页,不过要先实现一些接口。
            
    <subtab class="net.sourceforge.cruisecontrol.dashboard.widgets.ErrorsAndWarningsMessagesWidget" />
        
    </subtabs>
    </dashboard>

    四、配置文件中的注意事项


    1、如果logs、artifacts和projects目录不存在,在你运行CruiseControl之前,要手工建立它们。
    2、确保两个配置文件中的logs/artifacts目录指向同一个目录。因为CruiseControl core会向其中写数据,而Dashboard会从中读数据。

    五、小贴士

    在Config.xml文件中,有几个元素的概念要先澄清一下(只针对当前示例,严格定义请参见CruiseControl的文档)。
    1. <listeners> 用于监听状态变化,如waiting for build,queued,building。一般不用改变。
    2. <bootstrappers>用于检出代码,CruiseControl有很多种bootstrapper,示例中使用的是SVN。localWorkingCopy属性是指你把代码检出到安装CruiseControl机器的哪个文件目录。
    3. <modificationset>用于监听Repository的变化频率,如果CruiseControl发现代码有变化,而且在quietperiod秒内没有其它用户检入代码(用于保证被构建的版本完整性),CruiseControl才会检出代码。
    4. <schedule >用于指定CruiseControl去检查Repository的时间间隔。并指定使用哪个构建文件。示例中使用的是ant脚本,构建文件是被检出项目的根目录下的build.xml(即在Repository中)。
    5. <log>用于指定CruiseControl把日志放在哪里,把哪些构建结果放在日志中。如果没有指定任何属性,默认为logs目录下的${project.name}目录。
    6. <publishers> 用于在构建结束后,发布哪些消息和文件。CruiseControl有很多插件可以做各种各样的Publishing。例如,在构建成功后,通过http调用指定的页面,也可以给指定的人发邮件。在失败时,播放音乐,通知team。

    今天就写到这里,下次我们介绍如何加入一个Project。

    好,现在我们已经在自己的机器上建立了一个持续集成服务器,并初步了解它的配置文件。在本文中,我们就要把自己的项目加到其中。 做为一个入门示例,我们先要陈述一下假设条件,以便我们快速推进我们的部署过程。


    一、 准备工作(请确认一下)

    1、你的项目代码放在Google Code上面(Google Code用的是SVN ),你的项目名称是yourprojectname,项目的源文件就放在trunk目录下。那么,其svn update的链接如下:http://yourprojectname.googlecode.com/svn/trunk/。CruiseControl只会更新文件,不会修改源代码,所以匿名检出就可以了。

    2、你的项目是一个JAVA项目,用ANT进行构建,构建文件 名为build.xml,放在项目的根目录上,默认的ant task名为all。确保文件中其中所有路径都是相对于项目根目录的,将其Copy到任何目录下,ant all都可以正确运行。(我们的主要目的是建立环境,使其在今后的开发工作中可以发挥作用,而不是要发现我们构建脚本中错误。)

    3、你的CruiseControl工作目录是C:/CruiseControl,方便起见,我们以下将用${CC_HOME}代替。

    4、你的logs目录是${CC_HOME}/logs。如果你没有独自改动配置的话,它的位置就如前所述。

    5、你的projects目录是${CC_HOME}/projects。如果你没有独自改动配置的话,它的位置就如前所述。

    6、你的artifacts目录是${CC_HOME}/artifacts。如果你没有独自改动配置的话,它的位置就如前所述。


    二、加入项目

    1、手工检出文件:

    确保将你的项目代码检出到${CC_HOME}/projects/yourprojectname目录下,即在该目录就是你项目的根目录,可以找到名为build.xml文件。

    2、修改配置文件(添加你的项目)

    将下面的代码段加入到config.xml文件中,位于<CruiseControl>节点下。


        <project name="yourprojectname"> --这里一定要与你的projects目录下的项目名相同

            
    <listeners>
                
    <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
            
    </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>
                
    <merge dir="projects/${project.name}/target/test-results"/>
                 <!-- 在上面一句,一定要确保构建失败后可以找到这个dir,如果没有,删除这个元素好了-->
            </log>

            
    <publishers>
                
    <onsuccess>
                    
    <artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/${project.name}.jar"/>
                    <!-- 在上面一句,一定要确保你打包出来的文件名是yourprojectname.jar -->
                </onsuccess>
            
    </publishers>

        
    </project>

    最终的文件如下:

    <cruisecontrol>
        
    <project name="connectfour">

            
    <listeners>
                
    <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
            
    </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>
                
    <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>

        
    <project name="yourprojectname">

            
    <listeners>
                
    <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
            
    </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>
                
    <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>

    </cruisecontrol>

    三、看一下结果

    (1) CruiseControl会自动更新这个配置文件,加载时间一般是在任何一个项目需要检查是否有更新时。

    (2) 你会看到这个项目在Dashboard上首先是灰色的方块,因为这个项目还从来没有在CruiseControl上构建过,没有任何历史信息,我们称该项目为"inactive"。

    (3) 过一会儿,你会看到一个环形动态图标,表示它在构建中(执行build.xml脚本)。

    (4) 当环形动态图标消失时,你会看到它变成红色(如果构建失败的话)或绿色(如果构建成功的话)。

    我新加的项目名是vcdstore,现在我的dashboard上有两个项目了。


    小贴士:

    (1) 目前CruiseControl还不支持首次自动检出代码,所以你要先把项目代码手工检出到本地。

    (2) 如果你的SVN使用https方式更新代码,你一定要在命令行方式检出代码,并选择永久接受证书。

    (3) CruiseControl这个分支版本不支持在UI上增加项目。

    (4) 如果你在config.xml文件中把你的项目删除,却不删除它的日志的话,你在Dashboard上还是可以看到这个项目,此时它被标记为"Discontinued",表示你可以看到它的历史信息,但CruiseControl不会再构建它了。

    下一篇我们将讲述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页面。

    Dashboard page

    (2) Builds

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

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


    (3) Build Details

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

    如果您一直跟着这个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的进阶篇,我还将继续介绍CruiseControl的一些详细配置。

    2008年2月16日,CruiseControl发布了新的版本(CC 2.7.2 pre-release)。该版本加入了一些新的特性,特别是在Dashboard部分,并修正了一些Bug。

    该版本合并了分支,即https://cruisecontrol.svn.sourceforge.net/svnroot/cruisecontrol/branches/cce/cruisecontrol。也就是说,在前几篇博文中介绍的内容在该版本上都是有效的。

    下面简要介绍一下该版本的新增特性,你可以到http://tinyurl.com/2zm9mz下载2.7.2 pre-release。

    1. 更新了cc-config文件

    2.BuildAgents上更强健的AntBuilder

    3. Added SVN Bootstrapper to sample project

    4. 在Debian下安装CruiseControl后启动之


    5. 支持 ExecBuilder/RakeBuilder

    6. 支持 不配置 <modificationset>,以及 requiremodifications="false"

    7. 基于SVN Repository版本号的SVNLabelIncrementer

    8. 兼容 Microsoft Visual Studio Team FoundationServer 2008 (CC-735)

    9. 更新部分文档
      *  在Maven and Maven2 builders上加入了"timeout" attributes
      * 增加了对Rake Builder 的支持文档

    10. Dashboard
    ======================
    * build loop 通过HTTP post发送数据给Dashboard
    * 显示Build Queue
    * 显示暂停状态
    * 更新tooltips,显示更全面的Build状态信息
    * 显示 状态为discontinued的项目
    * 创建了dashboard widget API,目前的 "dashboards"tab 和 "builds" tab已经使用新的widget API.
    * See build information from zipped log files
    * 在Build Detail页面有Force build, RSS & JMX console功能的链接
    * 在RSS feed中包括最后的build状态
    * Dashboard可以运行于IE6, IE7和Firefox2.0
    * 使用相对时间格式
    * Installation diagnosis widget
    * dashboard上可以显示带单引号的项目名称
    * 当项目是inactive时,相关按钮变灰( "all builds", "all successful builds", "config panel" and "force build")
    * 可以通过命令行参数指定dashboard的位置



    我们将在下一篇文章中简要介绍CruiseControl的配置文件,为您加入自己的构建项目做准备。

  • 相关阅读:
    springboot与微信开发(一)
    使用springboot+layim+websocket实现webim
    使用springboot+layim+websocket实现webim
    Spring boot WebSocket 注入失败
    使用spring boot +WebSocket的那些坑
    Scrapy 问题锦集(后边继续更新)
    mac安装并创建Scrapy项目
    mac 安装MySQL-python的坑
    IDEA/Pycharm文件头注释模板
    工作用到的正则及测试工具
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2123448.html
Copyright © 2020-2023  润新知