尝试通过 PostBuildEvent 启动 TFS2013 团队构建时出现错误代码 255

Error code 255 when trying to kick off a TFS2013 team build via a PostBuildEvent

我正试图在另一个团队构建完成时启动一个团队构建,因此我将其添加到正在构建的项目的 .csproj 中:

<PropertyGroup Condition=" $(IsDesktopBuild) == 'false' ">
<PostBuildEvent>
  <command>
    cmd /c "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\tfsbuild.exe" start /collection:http://Server/CollectionName /builddefinition:\BuildDefinitionName
  </command>
</PostBuildEvent>

我在没有 cmd /c 的情况下尝试过,但没有帮助。我也尝试过它周围没有命令 /command,但无论我选择哪个选项,我都会得到同样的错误。如果我只是将命令复制并粘贴到 DOS window 中,它就可以正常工作。错误是:

C:\Program Files (x86)\MSBuild.0\bin\Microsoft.Common.CurrentVersion.targets (4548): The command "<command xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    cmd /c "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\tfsbuild.exe" start /collection:Server/Collection /builddefinition:\BuildDefinitionName
  </command>" exited with code 255.

我听取了@Andy-MSFT 的建议并编写了一个 powershell 脚本来对服务器进行 REST 调用,我得到了相同的结果:

这是对脚本的调用:

这是我编写的 PowerShell 脚本:

当我从命令行运行脚本时,它工作正常。而且我可以连续 运行 两次,所以这不是在构建 运行ning 时无法 运行 的情况。

2017 年 7 月 29 日更新

我采纳了@Andy-MSFT 的最新建议并在 PowerShell 脚本的最后一行添加了一个出口,但我仍然收到此错误:

注意错误消息末尾的命令,所以我取出了命令 /command xml 现在我得到了这个:

错误从 255 更改为 123。知道这是什么意思吗?

2017 年 7 月 31 日更新 @Eddie - MSFT 我按照你的建议将 tfsbuild 添加到 PostBuildEvent,我得到了这个:

这是我的 PostBuildEvent 的样子:

更新 2 - 1/31/17 到 @Andy-MSFT & @Eddie - MSFT 我使用以下 AfterBuild 目标获得了 运行 的初始构建,但它实际上没有执行任何操作(它不会启动构建)。日志中也没有提到它:

更新 3 - 2017 年 7 月 31 日 我尝试将一些调试信息添加到我的 powershell 脚本中(见下文),因此我在脚本启动时写入一个文本文件,然后再次尝试写入调用结果以启动构建。在所有情况下,它都会写入第一个文件,因此我知道脚本正在启动。如果我从命令行 运行 文件 result.txt 充满了来自生成的构建的文本,但是当来自 AfterBuild 目标的 运行 文件是空的。不确定这是否有帮助,但我认为它是相关的:

更新 8/1/17 以回应@Eddie - MSFT 的最新评论

是的 - 我试过了。它建立了,但这个电话似乎不起作用。没有错误消息,但没有构建开始。这是电话:

这是显示它可能被启动的日志,但它不是:

更新 8/1/17 8:51am PT 我让构建看起来开始了(我从我的 PowerShell 脚本中捕获了调用的结果并将其写入文件 here,但实际上构建仍然没有开始。

我可以重现这个问题,原因是您无法在构建处理中启动另一个构建。这意味着您可以在前一个 完成 之后使用该命令开始新的构建。当构建为 运行 时,您可以通过 运行 命令检查这一点,它将收到相应的错误。

所以,我们不能使用 PostBuildEvent 或 Post-Build 脚本来实现。

您可以尝试使用 REST API 请求新构建,它会将构建排队。

我不知道为什么,但这才刚刚开始起作用。我将 "http://" 附加到 GetServer() 调用的开头,但我认为这不是它起作用的原因。无论如何,它现在有效。感谢@Andy-MSFT 和@Eddie @MSFT 对此的帮助!