TFS 2018 XAML构建迁移

时间:2018-05-23 09:02:41

标签: tfs azure-devops tfsbuild tfvc tfs2018

我目前正在将XAML构建定义升级到新构建系统。已经压制了一些错误,但现在我处在一个我无法再说出错误的地步。我们在大多数构建过程中使用PowerShell脚本,尽管服务器上提供了所有必需的数据,但在运行构建时出现以下错误:

enter image description here

有谁知道可能导致该错误的原因是什么?或者至少在哪里检查?

提前致谢。

修改 该脚本准备了外部工具无法完成的构建配置,并且特定于我们的项目。错误发生在$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

}

2 个答案:

答案 0 :(得分:2)

问题在于:

您正在使用新的构建系统。您需要退回并重新评估您在新构建系统的功能上下文中的现有脚本。

你有这个大的PowerShell片段来检索内部版本号。这很棒,除了两件事:

  1. 它永远不会起作用 - SOAP对象模型没有任何“新”(例如非XAML)构建的意识。相反,它们有一个REST API。
  2. 您可以通过查看$env:BUILD_BUILDNUMBER变量来检索当前的内部版本号。没有必要的特殊代码。

答案 1 :(得分:0)

在以前版本的Team Foundation Server中,客户端对象模型已在GAC中注册,并在运行XAML时由构建代理预加载。在新代理中,构建步骤独立于客户端对象模型。

您可以通过两种方法找到客户端对象模型程序集:

还有一个更简单但正式不支持的选项:

  

不要使用$(Agent.ServerOMDirectory)。任务作者依赖与代理捆绑在一起的SDK是不安全的。 Agent.ServerOMDirectory是一个便利变量,指向与代理捆绑在一起的最新SDK。 SDK可能在不同版本之间具有破坏的界面更改。根据代理程序附带的最新版本,您的任务将不可靠。

获取buildnumber

正在填充构建变量以在脚本中设置构建号,可以使用$env:Build.BuildNumber引用它。

要设置内部版本号,请使用

向控制台写一个特殊语句
$value = "$($env:Build.BuildNumber)_US`
Write-Host "##vso[build.updatebuildnumber]$Value"

或者,您可以使用VSTS Variable Toolbox extension.

中的设置变量任务