【问题标题】:How can I force multiple projects from one project in cruisecontrol.net如何从 Cruisecontrol.net 中的一个项目中强制执行多个项目
【发布时间】:2010-01-21 20:15:40
【问题描述】:

我是 Cruise control.net 的新手,请帮我解决以下情况

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

示例 如果我从 BuildAll 项目中强制,它应该构建项目 A、项目 B(项目 A 完成后)和项目 C(项目 A 和项目 B 完成后)

如果我强制项目 A,它应该启动,同时如果我强制项目 B 和项目 C,它们也应该在不检查项目 A 完成的情况下构建。

提前致谢

【问题讨论】:

    标签: cruisecontrol.net


    【解决方案1】:

    在项目 B 中,您可以添加一个文件系统源代码控制元素,指向项目 A 的输出目录,设置为在修改时触发。

    这将产生一个副作用,即无法构建项目 A 如果它也会触发项目 B 来构建。

    【讨论】:

      【解决方案2】:

      在我看来,更好的解决方案是使用一些构建脚本,例如 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 中的状态。但这可以解决,因为您的项目 name="All" 可能有许多 msbuild 任务:

        <project name="All" >
          <!-- ... -->
          <tasks>
            <msbuild>
             <!-- ... -->
              <targets>ProjectA</targets>
            </msbuild>
            <msbuild>
             <!-- ... -->
              <targets>ProjectB</targets>
            </msbuild>
          </tasks>
          <!-- ... -->
        </project>
      

      希望这会有所帮助...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多