2015-09-16 3 views
7

Я использую новые возможности построения скриптов в Visual Studio Online (а не определения сборки XAML), и я пытаюсь, чтобы номер версии сборки включал последний идентификатор Git Commit ID целевого репозитория, используя формат номера сборки.Build.SourceVersion пуст в VSO vNext Build

Я использую следующий формат номер сборки:

$(MajorVersion).$(MinorVersion).$(BuildId).$(SourceVersion) 

Каких результаты в сгенерированном номере версии 1.0.1234. - то есть значение SourceVersion пустое, что вызывает ошибку в ВСО при очередях сборки. Я также попытался квалифицировать переменную, префикс ее Build. с тем же результатом. Для тестирования, я изменил номер сборки в следующем формате:

$(MajorVersion).$(MinorVersion).$(BuildId).$(SourceBranch) 

Это правильно приводит к значению 1.0.1234.refs_heads_master

Я использую Predefined Variables ссылку и Build.SourceVersion занесен в список глобальной переменной ,

Я делаю что-то неправильно, я столкнулся с ошибкой или это по дизайну и недоступно в момент сборки в очереди? Если это по дизайну, есть ли способ автоматически включать короткий идентификатор Git Commit в формате номера сборки?

Это где я установить формат номера сборки в ВСО: This is where I set the build number format in VSO

Это ошибка, я вижу, когда я явно не указать Git CommitId:

400: Номер сборки форматированная строка $ (MajorVersion). $ (MinorVersion). $ (BuildId). $ (SourceVersion) сгенерировано номер сборки 0.1.1. который содержит недопустимый символ (ы), слишком длинный или заканчивается символом '.'. Максимальная длина номера сборки - 255 символов. Символы, которые не разрешены, включают «», «/», «:», '<', '>', '\', '|', '?', '@' И '*'.

+0

я могу добиться того, что вы описывается с помощью '$ (MajorVersion). $ (MinorVersion). $ (Build.BuildId). $ (Build.SourceVersion)'. Только что были проверены как на VSO, так и на TFS 2015. Результат выглядит следующим образом: '1.0.20.41f2983578f720695227a7a8a41ed3d7437efc30'. Вы уверены, что это не опечатка, вызывающая странное поведение на вашей стороне? –

+0

@YanSklyarenko, я всегда получаю «Невозможно развернуть макрос $ (Build.SourceVersion), указанный в формате номера сборки (тип InvalidMacroInBuildNumberException)» Исключение, если я использую $ (MajorVersion). $ (MinorVersion). $ (Build.BuildId) . $ (Build.SourceVersion), чтобы определить формат номера сборки. Кроме того, переменная SourceVersion является последним изменением управления версиями, которое включено в эту сборку. CommitId или номер набора изменений (например, CS1234), который не должен быть чем-то вроде «41f2983578f720695227a7a8a41ed3d7437efc30». Я пропустил что-то важное? –

+0

@ Вики, хм, это другое дело, я полагаю. Похоже, это исключение ('InvalidMacroInBuildNumberException') означает, что формат номера сборки недопустим. Я имею в виду, он ожидает, что Major.Minor.Build.Revision все будут числами, а не теми идентификаторами и хэшами. Макро-часть $ (Build.SourceVersion) работает, но вы не можете использовать ее в номере сборки. Ваш другой комментарий - commit ID в Git - это длинный хэш, 'CS1234' - это формат набора изменений TFVC. –

ответ

2

Я боюсь, что он не может использовать $(SourceVersion) в формате номера сборки. Однако, я думаю, вы можете использовать PowerShell для изменения номера сборки как $(SourceVersion), и вам нужно включить PowerShell в процесс сборки. . ссылку для подробностей

И вы можете определить PowerShell, чтобы быть похожими на:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.WorkItemTracking.Client") 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client") 
[System.Reflection.Assembly]::LoadWithPartialName("System.Net") 

[String] $CollectionUrl = "https://vsoserver.visualstudio.com/defaultcollection" 
[String] $BuildUrl = $env:BUILD_BUILDURI 

$netCred = New-Object System.Net.NetworkCredential("username","password") 
$basicCred = New-Object Microsoft.TeamFoundation.Client.BasicAuthCredential($netCred) 
$tfsCred = New-Object Microsoft.TeamFoundation.Client.TfsClientCredentials($basicCred) 


$teamProjectCollection = New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection($CollectionUrl,$tfsCred) 

$buildServer = $teamProjectCollection.GetService([type]"Microsoft.TeamFoundation.Build.Client.IBuildServer") 

$buildDetail = $buildServer.GetBuild([Uri]$BuildUrl) 

$buildDetail.BuildNumber = $Env:BUILD_SOURCEVERSION 

$buildDetail.KeepForever = $true 
$buildDetail.Save() 
+0

Это выглядит полезно. Я буду иметь в виду, если не найду решение с использованием предопределенных переменных. – GaryJL

+0

Я бы сказал, что это единственное возможное решение. –

+0

Привет @Yan, я использую ваше решение, но получаю ошибку, System.InvalidOperationException: для обычной проверки подлинности требуется безопасное подключение к серверу. Прямо на этой строке IBuildDetail buildDetail = buildServer.GetBuild (BuildUrl); –

2

I был способен использовать $(Build.SourceVersion), но только тогда, когда сборка была автоматически активирована при фиксации (при непрерывной интеграции). Оказывается, чтобы быть пустым, только если я очередь вручную:

Build queue screenshot

Я использую следующий формат сборки номер:

$(BuildDefinitionName)_$(date:yyyyMMdd)_$(Build.BuildId).$(Build.SourceVersion)$(rev:.r) 
+0

У меня была такая же проблема, вы ее разрешили? – MonDeveloper

+0

@MonDeveloper Да, он автоматически заполняется при построении CI, когда я использую указанную выше строку формата. Также представляется возможным указать исходную версию при очередности сборки вручную, см. Ответ Уилла для деталей. – NeoGarRiGus

1

NeoGarRiGus - оказывается пустым, потому что при запуске вручную, вы должны ввести поле «Исходная версия», чтобы оно было заполнено.Входы CI, которые ценят автоматически при Поверка Dev, но когда очередь сборки вручную есть пустое поле в всплывающем окне, который позволяет ввести Источник Версия:

Source Version Field in VSTS

Смежные вопросы