【问题标题】:TFS 2018 XAML build migrationTFS 2018 XAML 构建迁移
【发布时间】:2018-11-02 04:37:05
【问题描述】:

我目前正在将我们的 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

}

【问题讨论】:

  • 在构建过程的哪个阶段?脚本在做什么?这是您的脚本中的错误; no on 可以帮你在不看脚本的情况下进行故障排除。
  • @DanielMann 从脚本中添加了一个 sn-p。它发生在构建任务开始之前,因为这个脚本是在预构建任务中执行的。
  • 您可以更新内部版本号。有一个特殊的日志注释可以实现这一点。

标签: tfs azure-devops tfsbuild tfvc


【解决方案1】:

问题来了:

您正在使用新的构建系统。您需要退后一步,根据新构建系统的功能重新评估现有脚本。

你有这个检索内部版本号的大 PowerShell sn-p。太棒了,除了两件事:

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

【讨论】:

  • 那么,为了保持与上面截图中相同的功能,我只需要更改脚本以使用 REST API?我们需要使用一个特殊的内部版本号,因为我们在末尾添加了一个内部国家代码。
  • 您可以在构建定义中设置构建编号格式。 $env:BUILD_BUILDNUMBER 的内容正是您在构建定义中定义的内容。我不认为您可以在构建创建后更改内部版本号。
【解决方案2】:

在 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. 中的Set Variable 任务

【讨论】:

  • 从团队资源管理器扩展文件夹加载成功,谢谢
猜你喜欢
  • 2019-05-06
  • 2019-06-06
  • 2018-10-24
  • 2018-08-15
  • 2018-10-15
  • 1970-01-01
  • 2019-12-01
  • 2019-03-09
  • 1970-01-01
相关资源
最近更新 更多