Миграция сборки TFS 2018 XAML

В настоящее время я обновляю наши определения сборки 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

}


person Community    schedule 23.05.2018    source источник
comment
На каком этапе процесса сборки? Что делает скрипт? Это ошибка вашего скрипта; no on может помочь вам устранить неполадки, не видя скрипт.   -  person Daniel Mann    schedule 23.05.2018
comment
@DanielMann Добавил фрагмент из сценария. Это происходит до запуска задачи сборки, так как этот скрипт выполняется в задаче предварительной сборки.   -  person    schedule 23.05.2018
comment
Вы можете обновить номер сборки. Для этого существует специальный комментарий в журнале.   -  person jessehouwing    schedule 23.05.2018


Ответы (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.

person jessehouwing    schedule 23.05.2018
comment
Загрузка из папки расширения Team Explorer сработала, спасибо - person ; 25.05.2018

Вот проблема:

Вы используете новую систему сборки. Вам нужно сделать шаг назад и переоценить имеющиеся у вас сценарии в контексте возможностей новой системы сборки.

У вас есть большой фрагмент PowerShell, который извлекает номер сборки. Это круто, кроме двух моментов:

  1. Это никогда не сработает — объектная модель SOAP не знает о «новых» (например, не-XAML) сборках. Вместо этого для них есть REST API.
  2. Вы можете получить номер текущей сборки, просмотрев переменную $env:BUILD_BUILDNUMBER. Нет необходимости в специальном коде.
person Daniel Mann    schedule 23.05.2018
comment
Итак, чтобы сохранить ту же функциональность, что и на моем снимке экрана выше, мне просто нужно изменить скрипт для использования REST API? Нам нужно использовать специальный номер сборки, поскольку в конце мы добавляем внутренний код страны. - person ; 23.05.2018
comment
Вы можете установить формат номера сборки в определении сборки. Содержимое $env:BUILD_BUILDNUMBER — это именно то, что вы определяете в своем определении сборки. Я не думаю, что вы можете изменить номер сборки после создания сборки. - person Daniel Mann; 23.05.2018