【问题标题】:Tag SVN "Nightly" Builds with CruiseControl.Net使用 CruiseControl.Net 标记 SVN“每晚”构建
【发布时间】:2010-03-17 01:04:47
【问题描述】:

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

在我当前的配置中,每 60 秒,我使用 Subversion 检查主干,运行 MSBuild,然后运行 ​​NUnit 或 MSTest。

我想将 SVN 作为标签再次提交,但我不希望在每次成功构建时都使用它。我希望它进行夜间构建或其他一些设定的时间表。对我来说,拥有两个具有基本相同选项的 CruiseControl.Net 项目似乎有点乏味。最好的处理方法是什么?

作为奖励,我希望它构建为发布版本并将二进制文件提交到同一个标签中。

【问题讨论】:

  • 为什么要保存已构建的二进制文件?听起来您的构建可能无法重复。如果构建是可重复的,那么您可以签出一个标签并运行构建脚本来生成二进制文件。

标签: svn continuous-integration cruisecontrol.net


【解决方案1】:

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

只要开发人员签入任何代码,第一个项目就会正常构建。

第二个项目仅在指定时间(例如晚上 11 点)之后运行,并且只有在第一个项目显示成功构建时才会运行。

因此,我在半夜使用第二个项目在 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>

... ...

其中设置为 false,以便项目不会删除代码,而是使用已经存在的代码。

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

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

【讨论】:

    【解决方案2】:

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

    我们在构建服务器上有 20 个项目和几个以前版本的发布分支。我们只使用 cctray 应用程序按需开始构建。因此,在开发人员完成实现某个功能后,他单击“强制构建”按钮,ccnet 开始执行它的操作(构建、测试、标记、将构建输出复制到网络驱动器、通知其他开发人员……)。

    优点是开发人员可以决定何时开始构建。没有改变的项目不会被建造。只有当开发人员认为他需要构建时,才能在多次提交后构建正在进行中的项目。

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

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

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

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

    我们实际上已经自己修补了 ccnet 以使其始终提交工作副本,以便我们获得确定性的行为。我曾经提交过补丁,但它从未成功...

    【讨论】:

    • 我还提交了一个补丁来标记工作副本。我的目标是通过向 ccnet.config 添加一个选项来保存构建生成的版本号。如果有兴趣,请转到“groups.google.com/group/ccnet-devel/browse_thread/thread/…”。如果有的话,最好为这样的功能提供一些支持。
    猜你喜欢
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多