如何从cruisecontrol.net中的一个项目强制执行多个项目

时间:2009-10-28 09:36:01

标签: cruisecontrol.net

我是巡航控制网的新手,请帮我解决以下问题

我需要从一个项目强制执行其他项目。我知道在发布器部分中使用force build我们可以强制执行其他项目。但我的要求是我想要强制超过2个项目,但这些项目应该一个接一个地开始,这也可以通过为项目提供queuePriority来解决。这里我们有一个限制我想单独强制构建,那时它不应该检查队列。

实施例 如果我从BuildAll项目强制它应该构建项目A,项目B(项目A完成后)&项目C(完成项目A和项目B之后)

如果我强迫项目A它应该开始,同时如果我强迫项目B&项目C也应该在没有检查项目完成的情况下构建。

提前致谢

2 个答案:

答案 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>

希望这会有所帮助......