0

我有问题的三个项目,让我们称他们为A,B和C.当“A”只是准备B中的某类构建的情况下,这是主要的构建。 C清理场景并基本上将B重置为其原始状态。 我已经将这些项目设置在同一个队列中,并且在项目B失败时测试了大部分工程的此过程。这是下面解释的情况。这种情况下ForceBuild关注 - CruiseControl.NET

<project name="A" queue="main"> 
    <publishers> 
    <email status of build/> 
     <forcebuild> 
     <project>B</project> 
     </forcebuild> 
     <forcebuild> 
     <project>C</project> 
     </forcebuild> 
     </publishers> 
    <task>Prepares special scenario</task> 
</project> 
<project name="B" queue="main"> 
    <publishers> 
    </publishers> 
    <task>Builds main project</task> 
</project> 
<project name="C" queue="main"> 
    <publishers> 
    </publishers> 
    <task>Resets special scenario</task> 
</project> 

方案:

  1. 当项目 'A' 是被迫的,它建立项目B,如果B是成功的,它建立C.这工作得很好。
  2. 当项目“A”是被迫的,它建立项目“B”,如果B出现故障,它建立C.这也是在我的情况很好。
  3. 数2场景和错误之后立即被固定在项目B;如果再次强制项目A并且项目B显示巡航状态为“固定”,则不会生成C.这不正确?

任何人都可以看到,之所以的项目C.不会,如果建2,3号的组合会发生什么?欢迎任何帮助或指导。

谢谢。

回答

1

你用它做之后,应该经常清理你的测试环境。我建议对项目C使用project trigger,并将其设置为类似于以下内容。如果A成功(这可以通过修改C中的项目触发器来更改),这将允许C始终运行。

<project name="A" queue="main"> 
    <publishers> 
    <email status of build/> 
    <forcebuild> 
     <project>B</project> 
    </forcebuild> 
    </publishers> 
    <tasks>Prepares special scenario</tasks> 
</project> 

<project name="B" queue="main"> 
... 
</project> 

<project name="C" queue="main"> 
    <triggers> 
    <projectTrigger project="A" /> 
    </triggers> 
    <publishers /> 
    <tasks>Resets special scenario</tasks> 
</project> 
+0

谢谢马修。有趣的是,我无法重新创建我的本地服务器上初始说明的场景。我的方法和你建议的方法都按预期工作。但前进我会采用ProjectTrigger的使用,因为它似乎是处理这些情况的更清晰的方式。再次感谢 ! – Geddon

1

能预测A负责清理的当前状态,并为新的版本做准备。

说,例如有通过B的构建停电一部分的方式。在这种配置中,您需要手动强制C才能运行构建过程?

如果A运行与C相同的任务,那么作为自己的任务,这将消除这个问题,我也相信你。

+0

感谢。我认为项目A可以对两者负责,但是A需要成功,因此B可以构建,而C应该只能在B之后构建。这就是为什么C是一个单独的项目。由于A,B和C在同一队列中,如果A被强制,B总是会在C之前被创建......你能更准确地解释一下你的意思吗?“如果A运行与C相同的任务,那么它就是自己的任务“,? – Geddon

+1

运行测试用例后,应始终清理环境。因此,您应该始终运行C以使自己恢复到有效状态。 –

+0

@Jerome。我修复了语法,对于混淆感到抱歉 –