CCNet - 预建任务cmd.exe?

时间:2010-11-04 15:24:48

标签: continuous-integration cruisecontrol.net cmd prebuild

我在ccnet.config文件中使用命令行预建任务在我进行干净构建之前删除了工作目录的内容。

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

问题是我收到错误:

  

System.IO.IOException:无法执行文件[C:\ CruiseControl \ Working \ cmd.exe]。

它似乎在工作文件夹中寻找cmd.exe。 所以我尝试将路径添加到cmd.exe,如下所示:

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

任何帮助都会很棒?

3 个答案:

答案 0 :(得分:2)

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

我只需要将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)

cmd.exe所在的路径位于%PATH%环境变量中。您无需明确设置它(您可以通过在执行提示中键入cmd来验证它):

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

至于目录使用问题。我想你想删除C:\ CruiseControl \ Working的子目录而不是整个Working。也可能是svn或其他进程正在处理它。如果你运行

会发生什么
if exist "C:\CruiseControl\Working" rd /s /q "C:\CruiseControl\Working"

直接在cmd?

答案 2 :(得分:1)

我在块中遇到与cmd.exe相同的问题。我在带有Source Gear Vault的多源控制块中将cleanCopy设置为true。除了将我的单行命令放入.cmd文件之外,这里或其他任何地方都没有解决这个问题,但我宁愿不必为我需要从命令提示符运行的每一行创建一个.cmd。