TeamCity NuGet安装程序步骤失败

时间:2016-02-01 10:28:30

标签: c# .net nuget teamcity nuget-package-restore

有时会出现此错误,通常此步骤正常,但在大约10%的情况下,它会失败并显示以下消息。

Nuget安装程序步骤是第一个构建步骤,并且在TeamCity中也启用了“clean checkout”,因此不应该有任何使用文件的进程。

  

[restore]进程无法访问文件'C:\ BuildAgent \ work ... \ packages \ Microsoft.Bcl.Build.1.0.21 \ Microsoft.Bcl.Build.1.0.21.nupkg',因为它是被另一个进程使用。

     

[restore]进程退出代码1

3 个答案:

答案 0 :(得分:6)

" 我的文件的根本原因正由另一个进程使用"

您可以做几件事,具体取决于根本原因:

  • 您使用MSBuild的并行构建功能:根据他的blog,它似乎与NuGet包还原不兼容,因为它可以为每个包运行并行包恢复项目(如果有几个项目需要Microsoft.Bcl.Build ...... Boom!)。禁用并行构建或在解决方案之外执行包还原(在命令行步骤中)。顺便说一句,它不是good practice to do NuGet restore with solution MSBuild

  • 还有另一个过程:
    使用进程监视器/资源管理器查找 哪个进程持有锁定文件。它可以是一个防病毒,文件索引工具,一个在后台运行的附加构建代理实例。由于锁定不是永久性的,并且对于这类问题,十分之一是非常多的,我不会打赌这是根本原因。

  • 没有其他流程:
    这是Teamcity NuGet安装程序中的一个错误。然后,您可以通过调用nuget restore的命令行步骤替换该步骤,并检查它是否可以解决您的问题。

  • 使用您喜欢的nuget插件诊断自己
    NuGet插件代码可用here。这意味着您可以编译自己的版本,并在发生这类问题时附加调试信息(例如,锁定文件的进程列表)。或者甚至更有用,您可以添加重试步骤,以防文件被锁定。

编辑:对于那些在Unix上使用Teamcity的人......

我尝试在Unix上安装Teamcity,并使用NuGet插件在mono上构建。顺便说一句,NuGet插件在Unix上根本不起作用(JetBrains不支持它)。我甚至试图修复它,但用命令行替换它更容易。

答案 1 :(得分:3)

每个构建代理都有单独的工作目录吗?否则两个paralel构建可以在同一时间执行。

答案 2 :(得分:2)

试试这个:

  1. 在TeamCity中添加一个特殊的构建步骤,该步骤在“即使某些先前步骤失败”时运行。 (https://confluence.jetbrains.com/display/TCDL/Configuring+Build+Steps
  2. 在此构建步骤中,找出锁定文件的进程并将其打印在日志中。 (How do I find out which process is locking a file using .NET?