![](/img/trans.png)
[英]vNext TFS 2015 QueryBuildDefinition function in powershell not finding my build definition
[英]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 API或C#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.