CCNET- MSBUILD之前删除工作副本?
-
28-09-2019 - |
题
我正在使用VisualSVN服务器和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>
解决方案
我找到了我最初问题的答案:
我只需要将CleanCopy True放在SourceContol块中。
<sourcecontrol type="svn">
<trunkUrl>TRUNK-URL</trunkUrl>
<executable>SVN.EXE</executable>
<username>TEST</username>
<password>TEST</password>
<cleanCopy>true</cleanCopy>
</sourcecontrol>
其他提示
我认为修改MSBUILD脚本不是这里最简单的解决方案。删除工作副本不是构建本身的一部分,它是CC .NET构建过程的一部分。当您使用CC.NET构建时,您需要它,而不是使用VS构建或其他情况。
我要做的是使用批处理,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>
实际上,您可以通过清理工作使MSBuild任务的第一部分准备发行目录
您可以通过与此类似的域进行操作
<ItemGroup>
<FilesToDelete Include="<PathGoesHere>\**\*"/>
</ItemGroup>
<Target Name="Task" DependsOn="Preparation">
//normal task happens here
</Target>
<Target Name="Preparation">
<Delete Files="@(FilesToDelete)" />
</Target>
不隶属于 StackOverflow