Pregunta

Soy la creación de un entorno de integración continua, utilizando VisualSVN Server y CrusieControl.NET. Lo que quiero hacer es borrar la copia de trabajo antes de que comience la tarea de MSBuild?

He leído que podría utilizar Nant o un archivo por lotes para que resulte aplicable CCNet. ¿Cuál es la mejor práctica aquí? Cualquier ayuda en esto sería mi gran!

aquí es un extracto de la sección de 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>
¿Fue útil?

Solución

He encontrado la respuesta a mi pregunta original:

Simplemente tenía que poner la verdadera cleanCopy dentro del bloque SourceControl.

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

Otros consejos

No creo que la modificación de la escritura msbuild es la solución más fácil aquí. La eliminación de la copia de trabajo no es parte de la construcción en sí, es parte del proceso de construcción cc .net sin embargo. Que lo necesite cuando se genera con cc.net, no cuando se construye con VS o más.

Lo que quiero hacer es o bien hacerlo con el lote, o un script de PowerShell msbuild. La eliminación de un directorio es sencillo por lo que recomiendo hacerlo con lotes:

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

en realidad se podría hacer la primera parte de su tarea de MSBuild preparar el directorio de versión haciendo la limpieza

que podría hacerlo por dominio algo similar a esto

<ItemGroup>
    <FilesToDelete Include="<PathGoesHere>\**\*"/>
</ItemGroup>

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

<Target Name="Preparation">
      <Delete Files="@(FilesToDelete)" />
</Target>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top