TFS2015 VNEXT build PowerShell自定义 - 异常调用保存:TF215070:构建URI无



先前使用了TFS2013和基于XAML的构建。曾在C#中为XAML构建创建了许多自定义任务,其中包括通过TFS .NET客户端API库(而不是REST API)以编程方式设置构建编号。现在已经搬到了TFS2015,并试图转移到基于Vnext的构建中。试图通过重新编码为PowerShell脚本来将我们的基于C#的自定义转换为新构建过程。我正在尝试使用以下脚本来编程设置构建号(如我们以前通过C#所做的那样):

# Step 1: load the TFS assemblies
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Common")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client")
# Step 2: get the collection
$collection=[Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)
# Step 3: get the build server
$buildServer=$collection.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
# Step 4: get the details for the currently running build
$buildDetail = $buildServer.GetBuild($env:BUILD_BUILDURI)
# Step 5: update the build number
$buildDetail.BuildNumber = "1.2.3.4-MyBuild"
# Step 6: save the changes to the build details
$buildDetail.Save()

一切似乎都很好,直到第6步,我尝试将更改保存到buildDetail.BuildNumber。当调用" save()"方法时,生成以下错误:

Exception calling "Save" with "0" argument(s): "TF215070: The build URI vstfs:///Build/Build/40177 is not valid. Make sure that this build exists and has not been deleted.

我能说的,步骤4正在返回一个实现Microsoft.TeamFoundation.Build.Client.IBuildDetail接口的实例(正如我所期望的那样)。同样,显然,构建URI有效,因为它专门用于在同一步骤中加载构建信息。同样,这种逻辑模仿了我们在基于C#的XAML自定义中使用的相同逻辑,只是在PowerShell下重写。

搜索Internet,我找不到与此错误有关的,无法弄清楚为什么会收到它。我确实找到了我在这里尝试做的(更复杂的)版本:https://github.com/voice4net/build-scripts/blob/master/master/applyversionfromsourcecontrol.ps1。虽然我没有直接尝试使用此脚本,但它似乎基本上是在做同一件事,并且大概是为其作者工作的。

是否有人可以帮助我理解此错误,为什么我会得到它,理想情况下,如何修复它?

旁注:这不是Microsoft的托管TF;这是我们公司内部安装的传统TFS系统。

似乎您正在尝试使用错误的API来更新构建号。您应该使用客户端DLL的WebAPI/REST部分。

也就是说,我强烈建议您在纯Powershell或打字稿中创建一个自定义任务以实现您的目标。

这是在打字稿中如何做的示例:

console.log(`##vso[build.updatebuildnumber]${newBuildNumber}`);

或PowerShell:

Write-VstsUpdateBuildNumber -Value $newBuildNumber

您可以在此处检查有关如何创建构建任务的参考:https://github.com/microsoft/vsts-task-lib

TFS SOAP对象模型(例如Microsoft.TeamFoundation.Build.Common)中的方法仅适用于XAML构建系统。您是针对错误的构建系统,这就是为什么您遇到问题的原因。

使用适当的对象模型(直接的REST API或C#REST API包装器)。

最新更新