我是巡航控制网的新手,请帮我解决以下问题
我需要从一个项目强制执行其他项目。我知道在发布器部分中使用force build我们可以强制执行其他项目。但我的要求是我想要强制超过2个项目,但这些项目应该一个接一个地开始,这也可以通过为项目提供queuePriority来解决。这里我们有一个限制我想单独强制构建,那时它不应该检查队列。
实施例 如果我从BuildAll项目强制它应该构建项目A,项目B(项目A完成后)&项目C(完成项目A和项目B之后)
如果我强迫项目A它应该开始,同时如果我强迫项目B&项目C也应该在没有检查项目完成的情况下构建。
提前致谢
答案 0 :(得分:1)
在项目B中,您可以添加一个文件系统源控制元素,指向项目A的输出目录,设置为触发修改。
这会产生副作用,即无法在没有的情况下构建项目A ,它也会触发项目B来构建。
答案 1 :(得分:1)
在我看来,更好的解决方案是使用一些构建脚本,如NAnt或MSBuild。然后你的CruiseControl .NET只执行构建脚本的一部分。通常构建脚本比ccnet.config更容易维护。
此外,调试更容易,因为您可以手动运行构建脚本的任何部分。
MsBuild中的示例:您可以先创建一个xml文件(让我们称之为MyTasks.msbuild):
<Project DefaultTargets="All" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="ProjectA">
<!-- Your project build-scripting...-->
<Exec Command="echo Hello A"/>
</Target>
<Target Name="ProjectB">
<!-- Your project build-scripting...-->
<Exec Command="echo Hello B"/>
</Target>
<Target Name="All">
<CallTarget Targets="ProjectA" />
<CallTarget Targets="ProjectB" />
</Target>
</Project>
如果您想从命令行使用它,只需输入“msbuild MyTasks.msbuild” 然后在ccnet.config中:
<project name="ProjectA" >
<!-- ... -->
<tasks>
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.21006\MSBuild.exe</executable>
<timeout>3600</timeout>
<logger>C:\Program Files\CruiseControl\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
<workingDirectory>C:\Temp\CI\</workingDirectory>
<projectFile>C:\MyTasks.msbuild</projectFile>
<buildArgs>/toolsversion:4.0 /p:Configuration=Debug;</buildArgs>
<targets>ProjectA</targets>
<description>Building Project A</description>
</msbuild>
</tasks>
<!-- ... -->
</project>
<project name="All" >
<!-- ... -->
<tasks>
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.21006\MSBuild.exe</executable>
<timeout>3600</timeout>
<logger>C:\Program Files\CruiseControl\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
<workingDirectory>C:\Temp\CI\</workingDirectory>
<projectFile>C:\MyTasks.msbuild</projectFile>
<buildArgs>/toolsversion:4.0 /p:Configuration=Debug;</buildArgs>
<targets>All</targets>
<description>Building Project A and B</description>
</msbuild>
</tasks>
<!-- ... -->
</project>
唯一不好的是,如果您的构建需要20分钟,那么您不知道cc中的状态。但是,这可以修复为您的项目名称=“所有”可能有许多msbuild任务:
<project name="All" >
<!-- ... -->
<tasks>
<msbuild>
<!-- ... -->
<targets>ProjectA</targets>
</msbuild>
<msbuild>
<!-- ... -->
<targets>ProjectB</targets>
</msbuild>
</tasks>
<!-- ... -->
</project>
希望这会有所帮助......