我目前正在将XAML构建定义升级到新构建系统。已经压制了一些错误,但现在我处在一个我无法再说出错误的地步。我们在大多数构建过程中使用PowerShell脚本,尽管服务器上提供了所有必需的数据,但在运行构建时出现以下错误:
有谁知道可能导致该错误的原因是什么?或者至少在哪里检查?
提前致谢。
修改
该脚本准备了外部工具无法完成的构建配置,并且特定于我们的项目。错误发生在$teamProjectCollection =...
Function Get-BuildNumberFromUri() {
<#
.SYNOPSIS
Reads the build number from the current TFS build ($Env:BUILD_BUILDURI)
.DESCRIPTION
Reads the build number from the current TFS build ($Env:BUILD_BUILDURI)
.NOTES
May fail if $env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI or $env:BUILD_BUILDURI
are not set
#>
[String] $CollectionUrl = "$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI"
[String] $BuildUrl = "$env:BUILD_BUILDURI"
if (-not $CollectionUrl -or -not $BuildUrl) {
return "0"
}
[void[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client")
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.VersionControl.Client")
$teamProjectCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($CollectionUrl)
$buildServer = $teamProjectCollection.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
$buildDetail = $buildServer.GetBuild($BuildUrl)
$buildNumber = $buildDetail.BuildNumber
return $buildNumber
}
答案 0 :(得分:2)
问题在于:
您正在使用新的构建系统。您需要退回并重新评估您在新构建系统的功能上下文中的现有脚本。
你有这个大的PowerShell片段来检索内部版本号。这很棒,除了两件事:
$env:BUILD_BUILDNUMBER
变量来检索当前的内部版本号。没有必要的特殊代码。答案 1 :(得分:0)
在以前版本的Team Foundation Server中,客户端对象模型已在GAC中注册,并在运行XAML时由构建代理预加载。在新代理中,构建步骤独立于客户端对象模型。
您可以通过两种方法找到客户端对象模型程序集:
还有一个更简单但正式不支持的选项:
不要使用$(Agent.ServerOMDirectory)。任务作者依赖与代理捆绑在一起的SDK是不安全的。 Agent.ServerOMDirectory是一个便利变量,指向与代理捆绑在一起的最新SDK。 SDK可能在不同版本之间具有破坏的界面更改。根据代理程序附带的最新版本,您的任务将不可靠。
正在填充构建变量以在脚本中设置构建号,可以使用$env:Build.BuildNumber
引用它。
要设置内部版本号,请使用
向控制台写一个特殊语句$value = "$($env:Build.BuildNumber)_US`
Write-Host "##vso[build.updatebuildnumber]$Value"
或者,您可以使用VSTS Variable Toolbox extension.
中的设置变量任务