Teamcity延迟复制工件

时间:2012-01-09 15:49:04

标签: msbuild teamcity

我正在运行MSBuild脚本来编译我的项目,并在TeamCity的常规设置中设置工件路径。我的MSBuild脚本首先构建,然后创建一个zip文件。我想将该zip文件添加为工件,但是当我在TeamCity上运行构建时,我收到此错误:

[17:44:56]: [CreateNightlyZip] Zip
[17:44:56]: [Zip] C:\BuildAgent\Build\Build.proj(55, 5): The process cannot access the file 'C:\BuildAgent\work\c13cf8f192b25cd1\bin\Debug\20120109_Foo.PE.zip' because it is being used by another process.

所以看起来TeamCity尝试在创建时正确获取zip文件,然后我的MSBuild脚本无法将文件放入其中。

这是MSBuild目标:

 <Target Name="CreateNightlyZip">
    <PropertyGroup>
      <StringDate>$([System.DateTime]::Now.ToString('yyyyMMdd'))</StringDate>
    </PropertyGroup>
    <ItemGroup>
      <DebugApplicationFiles Include="$(DebugPath)\**\*.*" Exclude="$(DebugPath)\*vshost.exe*" />
    </ItemGroup>
    <MakeDir Directories="$(NightlyBuildPath)"/>
    <Zip Files="@(DebugApplicationFiles)"
      WorkingDirectory="$(DebugPath)"
      ZipFileName="$(NightlyBuildPath)\$(StringDate)_$(NightlyZipName).zip"
      ZipLevel="9" />
  </Target>

有没有人有这个问题或者应该解决这个问题?

编辑:奇怪的是,当我在checkout文件夹的根目录中创建zip文件时,一切正常,但是当我创建它到Debug文件夹时,我得到了这个错误。

2 个答案:

答案 0 :(得分:2)

TeamCity仅在所有构建步骤完成时,即MSBuild脚本完成时发布工件。

要在构建期间发布工件,您需要在工件准备就绪时从构建脚本生成特殊服务消息:http://confluence.jetbrains.net/display/TCD65/Build+Script+Interaction+with+TeamCity#BuildScriptInteractionwithTeamCity-PublishingArtifactswhiletheBuildisStillinProgress

如果您不使用服务消息,则应检查哪个进程锁定了该文件。也许你在同一台机器上有两个代理同时运行构建并相互干扰?

答案 1 :(得分:1)

我最终做的不是将创建的.zip文件放入调试文件夹,而只放置到项目根文件夹。这样就创建了zip文件,Teamcity可以将其用作工件。