在CruiseControl.NET中每晚“发布构建”
我为我公司的一些项目管理CI服务器,在CruiseControl.NET 1.6.7981.1下运行。 这些项目在逻辑上构成了“产品”,但彼此之间(至少部分)是相互独立的。 作为比较,MS Office是由“Word”,“Excel”等独立项目组成的“产品”。
每个项目都有自己的ccnet-project,每当更改提交给源代码控制时(通过IntervalTrigger),就会生成它们。 这工作正常。
产品本身由不同“子”项目的输出以及附加的静态数据(位图,样本数据...)组成。 为此,我有一个单独的“发布”ccnet项目,它执行这些步骤,然后将数据复制到网络上的新输出文件夹。 这个“发布”也很好。 每次运行时,都会创建一个新文件夹; 目前每个文件夹是大约。 1GB大小。
我有两个额外的要求:
然而,我试图解决它的方式无法正常工作。 我目前的ccnet.config看起来差不多。 如下所示(仅限相关部分):
<project name="Child 1 dev" queue="dev" queuePriority="1">
<!-- Build the project -->
<publishers>
<!-- Logger, statistics, ... -->
<conditional>
<conditions>
<statusCondition value="Success" />
<lastStatusCondition value="Failure" />
</conditions>
<tasks>
<cruiseServerControl>
<actions>
<controlAction type="StartProject" project="Publish dev" />
</actions>
</cruiseServerControl>
</tasks>
</conditional>
<conditional>
<conditions>
<statusCondition value="Failure" />
</conditions>
<tasks>
<cruiseServerControl>
<actions>
<controlAction type="StopProject" project="Publish dev" />
</actions>
</cruiseServerControl>
</tasks>
</conditional>
</publishers>
</project>
<!-- Additional "child" projects as above -->
<project name="Publish dev" queue="dev" queuePriority="10">
<triggers>
<multiTrigger operator="And">
<triggers>
<multiTrigger operator="Or">
<triggers>
<projectTrigger project="Child 1" />
<projectTrigger project="Child 2" />
<projectTrigger project="Child 3" />
</triggers>
</multiTrigger>
<scheduleTrigger buildCondition="ForceBuild" time="23:30" />
</triggers>
</multiTrigger>
</triggers>
<!-- Do the publishing, a bunch of exec tasks. -->
</project>
问题:
所以简而言之,我想解决方案会为“发布dev”触发一组触发器:
如果#2或#3错误,则下一次检查只应在第二天晚上进行。
编辑:
lastStatusCondition肯定有问题。 我有以下输出:
构建失败:
2011-04-01 10:14:06,105 [Child 1 dev] [DEBUG] - Checking conditions
2011-04-01 10:14:06,105 [Child 1 dev] [DEBUG] - Checking status - matching to Success
2011-04-01 10:14:06,105 [Child 1 dev] [INFO] - Conditions did not pass - running else tasks
2011-04-01 10:14:06,105 [Child 1 dev] [INFO] - Tasks completed: 0 successful, 0 failed
2011-04-01 10:14:06,105 [Child 1 dev] [DEBUG] - Checking conditions
2011-04-01 10:14:06,105 [Child 1 dev] [DEBUG] - Checking status - matching to Failure
2011-04-01 10:14:06,121 [Child 1 dev] [INFO] - Conditions passed - running tasks
所以一切工作正常。 然后我立即重新构建它,并修复了构建:
2011-04-01 10:18:36,078 [Child 1 dev] [DEBUG] - Checking conditions
2011-04-01 10:18:36,078 [Child 1 dev] [DEBUG] - Checking status - matching to Success
2011-04-01 10:18:36,078 [Child 1 dev] [DEBUG] - Checking last build status - matching to Failure
2011-04-01 10:18:36,078 [Child 1 dev] [INFO] - Conditions did not pass - running else tasks
2011-04-01 10:18:36,093 [Child 1 dev] [INFO] - Tasks completed: 0 successful, 0 failed
2011-04-01 10:18:36,093 [Child 1 dev] [DEBUG] - Checking conditions
2011-04-01 10:18:36,093 [Child 1 dev] [DEBUG] - Checking status - matching to Failure
2011-04-01 10:18:36,093 [Child 1 dev] [INFO] - Conditions did not pass - running else tasks
2011-04-01 10:18:36,093 [Child 1 dev] [INFO] - Tasks completed: 0 successful, 0 failed
因此,尽管之前的构建失败了(正如您可以从匹配看到第一个日志中的失败),但当前(成功)构建的以前的构建状态属性显然不是失败! 我想我必须提交一个针对ccnet的错误...
看看我的博客,我在那里提供了一个解决方案。 赞赏评论:
http://rubenwillems.blogspot.com/2011/04/tuning-ccnet-to-your-whishes-new.html
对于你的第一个问题,我的想法就像你的想法:我认为时间表触发器保持开启状态并等待多个“OR触发器”被触发。 请注意,在反转角色时需要此行为:当您成功构建子项目时,您希望等到第二个触发器触发(23:30)。
适合您的要求的一些想法是:
至于你的第二个问题,我不知道为什么这个项目不会重新开始。
我personnaly设法处理这些产品与企业持续集成问题,我们使用了近一年,这是很大的安慰。
链接地址: http://www.djcxy.com/p/23271.html上一篇: Nightly "publish build" in CruiseControl.NET
下一篇: CruiseControl.Net build logs not showing on CCNet website after upgrade