TFS2015 vNext Build + PowerShell自定义 - 异常调用保存:TF215070:构建URI无效

问题描述 投票:0回答:2

以前是使用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下重写。

搜索互联网,我找不到与此错误相关的任何内容,也无法弄清楚为什么我会收到它。我确实找到了一个(更复杂的)我想在这里做的版本:https://github.com/voice4net/build-scripts/blob/master/ApplyVersionFromSourceControl.ps1。虽然我没有尝试直接使用这个脚本,但它似乎做了基本相同的事情,并且可能是为其作者工作。

有没有人可以帮助我理解这个错误,为什么我得到它,理想情况下,如何解决它?

侧面注意:这不是微软托管的TFS;这是我们公司内部安装的传统TFS系统。

powershell tfs
2个回答
0
投票

您似乎正在尝试使用不正确的API来更新您的内部版本号。您应该使用客户端DLL的WebAPI / REST部分。

这就是说我强烈建议你在纯PowerShell或TypeScript中创建一个自定义任务,以实现你的目标。

以下是在TypeScript中如何执行此操作的示例:

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

或者在PowerShell中:

Write-VstsUpdateBuildNumber -Value $newBuildNumber

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


0
投票

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

使用适当的对象模型(REST APIs directlyC# REST API wrappers)。

© www.soinside.com 2019 - 2024. All rights reserved.