如果没有重复的项目,我如何为CruiseControl.NET做夜间或其他预定的构建?
在我当前的配置中,每隔60秒,我使用Subversion检查主干,运行MSBuild,然后运行NUnit或MSTest。
我想将SVN作为标记提交回来,但我不希望每次成功构建它。我希望它能够制作夜间制作或其他一些时间表。对我来说,拥有两个基本相同选项的CruiseControl.Net项目似乎有点乏味。处理这个问题的最佳方法是什么?
作为奖励,我希望它构建为发布版本并在同一标记中提交二进制文件。
答案 0 :(得分:2)
到目前为止我找到的唯一方法是在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测试。
这有帮助吗?如果这是你想要进入的方向,我可以进一步扩展。
答案 1 :(得分:0)
我没有针对您的重复ccnet项目的问题的解决方案。但我会告诉你我们如何使用ccnet(我们对此非常满意)。
我们在构建服务器上有20个项目,以及以前版本的几个发布分支。我们只使用cctray应用程序按需开始构建。所以在开发人员完成一项功能后,他点击“强制构建”按钮,ccnet开始做它的事情(构建,测试,标记,将构建输出复制到网络驱动器,通知其他开发人员,......)。 / p>
优点是开发人员可以决定何时开始构建。没有改变的项目没有建成。只有当开发人员认为他需要构建时才可以构建具有正在进行的工作的项目。
开始夜间构建时想到的一个想法是使用ccnet的远程处理接口(cctray也使用它),将它连接到ccnet实例并在午夜调用force-build-method。关于“将二进制文件提交到同一标签”:
ccnet中存在一个问题,导致它有时会从主干标记修订,有时会标记工作副本。它取决于自上次构建以来是否有更改(在这种情况下它标记了来自主干的修订版),或者自上次构建以来没有更改(在这种情况下它标记工作副本)。
这非常令人讨厌,因为你永远不会知道将要提交什么 - 在第一种情况下你的二进制文件不会被提交,在第二种情况下它们会被提交。
我们实际上修补了ccnet,使其始终提交工作副本,以便我们获得确定性行为。我曾经提交了补丁但它从未进入过......