繁体   English   中英

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

[英]TFS2015 vNext Build + PowerShell Customization — Exception calling Save: TF215070: The build URI is not valid

以前使用的是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()

在尝试保存对buildDetail.BuildNumber的更改的第6步之前,一切似乎都可以正常工作。 调用“ 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 虽然我没有尝试直接使用此脚本,但是它似乎在做相同的事情,并且大概是为它的作者工作的。

有没有人可以帮助我理解此错误,为何得到此错误以及理想情况下如何解决该错误?

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

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

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

似乎您正在尝试使用错误的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM