CCNet - 在MSBuild之前删除工作副本?

时间:2010-11-03 12:54:03

标签: continuous-integration cruisecontrol.net ccnet-config

我正在使用VisualSVN Server和CrusieControl.NET建立一个持续集成环境。 我想要做的是在MSBuild任务启动之前删除工作副本?

我已经读过我可以使用Nant或ccnet将调用的批处理文件。 这里的最佳做法是什么? 对此的任何帮助都很棒!

这是ccnet.config

部分的摘录
      <tasks>
        <msbuild>
            <ItemGroup>
                <FilesToDelete Include="C:\CruiseControl\Working\\\**\*"/>
            </ItemGroup>
            <Target Name="Task" DependsOn="Preparation">
                  build
            </Target>
            <Target Name="Preparation">
                  <Delete Files="@(FilesToDelete)" />
            </Target-->
            <executable>                                                      
                C:\WINDOWS\microsoft.net\Framework64\v3.5\MSBuild.exe                                              
            </executable> 
            <projectFile>Example.sln</projectFile>  
            <buildArgs>
                /p:Configuration=Release /p:MSBuildExtensionsPath=C:\Progra~2\MSBuild /p:MSBuildEmitSolution=1 /verbosity:minimal
            </buildArgs>                                                      
            <logger>
                C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll
            </logger>
        </msbuild>
      </tasks>

3 个答案:

答案 0 :(得分:4)

我找到了原来问题的答案:

我只需要将cleanCopy设置为在sourcecontrol块中为真。

<sourcecontrol type="svn">                                            
    <trunkUrl>TRUNK-URL</trunkUrl>                
    <executable>SVN.EXE</executable>           
    <username>TEST</username>                                         
    <password>TEST</password> 
    <cleanCopy>true</cleanCopy>         
  </sourcecontrol>

答案 1 :(得分:1)

我认为修改msbuild脚本不是最简单的解决方案。 删除工作副本不是构建本身的一部分,但它是cc .net构建过程的一部分。使用cc.net构建时需要它,而不是使用VS或其他构建时。

我要做的是使用batch,powershell或msbuild脚本。删除目录非常简单,因此我建议您使用批处理:

<prebuild>
     <exec>
        <executable>cmd.exe</executable>
        <buildArgs>/c "if exist "C:\CruiseControl\Working" rd /s /q "C:\CruiseControl\Working""</buildArgs>
    </exec>
</prebuild>

<tasks>

    <msbuild>
        <executable>                                                      
            C:\WINDOWS\microsoft.net\Framework64\v3.5\MSBuild.exe                                              
        </executable> 
        <projectFile>Example.sln</projectFile>  
        <buildArgs>
            /p:Configuration=Release /p:MSBuildExtensionsPath=C:\Progra~2\MSBuild /p:MSBuildEmitSolution=1 /verbosity:minimal
        </buildArgs>                                                      
        <logger>
            C:\Program Files (x86)\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MSBuild.dll
        </logger>
    </msbuild>
  </tasks>

答案 2 :(得分:0)

您实际上可以通过执行清理来使MSBuild任务的第一部分准备发布目录

你可以通过类似于

的域名来实现
<ItemGroup>
    <FilesToDelete Include="<PathGoesHere>\**\*"/>
</ItemGroup>

<Target Name="Task" DependsOn="Preparation">
      //normal task happens here
</Target>

<Target Name="Preparation">
      <Delete Files="@(FilesToDelete)" />
</Target>