代码之家  ›  专栏  ›  技术社区  ›  Daniel A. White

标签svn“Nightly”构建与CruiseControl.net

  •  4
  • Daniel A. White  · 技术社区  · 14 年前

    在没有重复项目的情况下,我如何为CruiseControl.net进行夜间或其他计划的构建?

    在我当前的配置中,每隔60秒,我会使用subversion检查主干,运行msbuild,然后使用nunit或mstest。

    我想将SVN作为一个标记提交回去,但我不希望在每个成功的构建中都使用它。我要它做一个晚上的建设或其他一些固定的时间表。对我来说,有两个CruiseControl.net项目具有基本相同的选项似乎有点乏味。最好的方法是什么?

    作为一个额外的好处,我希望它构建为一个发布版本,并在同一个标记中提交二进制文件。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Brett Rigby    14 年前

    到目前为止,我找到的唯一方法是在ccnet.config文件中创建另一个依赖于第一个的输出的项目…这就是我的意思。

    每当开发人员签入任何代码时,第一个项目都会正常构建。

    第二个项目仅在指定的时间(如11pm)后运行,并且仅在第一个项目显示成功的生成时运行。

    因此,我使用第二个项目在半夜在Selenium中进行UI测试,而不在白天运行它们,并且在开发人员需要时占用构建机器。

    以下是我所做的:在ccnet.config文件中,我的第二个项目的设置如下:

    <triggers>  
            <multiTrigger operator="And"> 
                <triggers> 
                    <projectTrigger project="NameOfProject1" /> 
                    <scheduleTrigger time="23:00" buildCondition="ForceBuild">
                        <weekDays>
                            <weekDay>Monday</weekDay>
                            <weekDay>Tuesday</weekDay>
                            <weekDay>Wednesday</weekDay>
                            <weekDay>Thursday</weekDay>
                            <weekDay>Friday</weekDay>
                            <weekDay>Saturday</weekDay>
                        </weekDays>
                    </scheduleTrigger>
                </triggers> 
            </multiTrigger>
        </triggers>
    

    此外,我的源代码管理部分还有:

    <sourcecontrol type="multi">
    <sourceControls>   
        <svn>
            <trunkUrl>http://<my-svn-url>:81/svn/<my-project-name>/branches/1.13</trunkUrl>
            <workingDirectory>c:\ccnet\<my-system-name>\<my-project-name></workingDirectory>
            <cleanCopy>false</cleanCopy>
        </svn>
    

    … …

    这样,项目就不会删除代码,而是使用已经存在的代码。

    然后在我的任务下一步,我将一个标志传递给nant,告诉它只为我的项目运行UI测试,因为ccnet.config文件中的第一个项目已经运行了构建过程,但是忽略了UI测试。

    这有帮助吗?如果这是你想要进入的方向,我可以进一步扩展。

        2
  •  0
  •   stmax    14 年前

    对于您的重复ccnet项目问题,我没有解决方案。但我会告诉你我们是如何使用ccnet的(我们对此非常满意)。

    我们在构建服务器上有20个项目,以及以前版本的几个发布分支。我们只使用cctray应用程序根据需要启动构建。因此,在开发人员完成一个特性的实现之后,他单击“force build”按钮,ccnet开始做它的事情(build、test、tag、copy build output to a network drive、notify other devs…)。

    优点是开发人员可以决定何时开始构建。未更改的项目不会生成。只有当开发人员认为他需要一个构建时,才可以在以后构建具有正在进行的工作的项目。

    开始夜间构建的一个想法是使用ccnet的远程处理接口(cctray也使用该接口),将其连接到ccnet实例并在午夜调用force-build方法。

    关于“将二进制文件提交到同一个标记”:

    ccnet中存在一个问题,导致它有时从主干标记修订,有时标记工作副本。这取决于自上次生成以来是否有更改(在这种情况下,它从主干标记修订),或者自上次生成以来是否没有更改(在这种情况下,它标记工作副本)。

    这非常烦人,因为您永远不知道将提交什么——在第一种情况下,您的二进制文件不会提交,在第二种情况下,它们会提交。

    实际上,我们自己已经修补了ccnet,以使它始终提交工作副本,从而获得确定性行为。我曾经提交过补丁,但它从来没有在…