Continuous integration “每夜”;“发布构建”;在CruiseControl.NET中
我在CruiseControl.NET 1.6.7981.1下为公司的一系列项目管理CI服务器。这些项目在逻辑上形成一个“产品”,但(至少部分)彼此独立。相比之下,MS Office是一个由独立项目“Word”、“Excel”等组成的“产品” 每个项目都有自己的ccnet项目,每当变更提交到源代码管理时(通过IntervalTrigger),该项目就会得到构建。这个很好用 产品本身包括不同“子”项目的输出以及附加的静态数据(位图、示例数据等)。为此,我有一个单独的“发布”ccnet项目,它执行这些步骤,然后将数据复制到网络上的新输出文件夹。这种“出版”也很有效。每次运行时,都会创建一个新文件夹;目前每个文件夹的大小约为1GB 我还有两个额外要求:Continuous integration “每夜”;“发布构建”;在CruiseControl.NET中,continuous-integration,cruisecontrol.net,Continuous Integration,Cruisecontrol.net,我在CruiseControl.NET 1.6.7981.1下为公司的一系列项目管理CI服务器。这些项目在逻辑上形成一个“产品”,但(至少部分)彼此独立。相比之下,MS Office是一个由独立项目“Word”、“Excel”等组成的“产品” 每个项目都有自己的ccnet项目,每当变更提交到源代码管理时(通过IntervalTrigger),该项目就会得到构建。这个很好用 产品本身包括不同“子”项目的输出以及附加的静态数据(位图、示例数据等)。为此,我有一个单独的“发布”ccnet项目,它执行这
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
因此,尽管先前的构建失败了(正如您在第一个日志中从匹配到失败中所看到的),但当前(成功)构建的previous build status属性显然不是Failure!我想我将不得不针对ccnet提交一个bug…对于你的第一个问题,我的想法和你的一样:我认为调度触发器一直处于激发状态,并等待多重“或触发器”被激发。请注意,当您反转角色时会出现这种行为:当成功生成子项目时,您希望等待第二个触发器触发(23:30) 满足您需求的两个想法是:
- 将成功添加到项目触发器(以防止异常)
- 将项目触发器的innerTrigger设置为计划触发器,而不是默认的间隔触发器。设置为23:30触发的日程表触发器应该可以解决您的问题
我个人设法解决了这些产品的问题,我们使用了将近一年,这让我松了一口气。看看我的博客,我在那里提供了一个解决方案。欢迎评论:
对于第二个问题,我的猜测是,可能每个项目的lastStatusCondition不能正常工作,而是“全局的”。因此,如果另一个项目同时成功运行,则最后一个状态设置为success,即使项目的最后一个状态应继续为“failed”。使用项目触发器时存在一个问题:第一次触发内部触发器时,它没有以前的状态作为比较。所以它不知道该怎么办。默认间隔触发器没有问题(因为它每5秒触发一次)。但这意味着在服务器重启后,我们可以再等待一天,或者总是触发(即使没有必要)。非常感谢!我得测试一下它是否按计划工作。次要更正:在
子项目更改()
中,如果同时生成了子项目,则立即返回true。但是,尚未检查的子项目可能处于失败状态。在本地,我将其更改为将其保存到一个临时变量,并在最后返回它。
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