Build.SourceVersion在VSO vNext Build中为空

Gar*_*yJL 9 git azure-devops azure-pipelines

我正在使用Visual Studio Online中的新脚本化构建功能(而不是XAML构建定义),并且我尝试使用构建号格式使构建版本号包含目标存储库的最新Git Commit ID.

我使用以下内部版本号格式:

$(MajorVersion).$(MinorVersion).$(BuildId).$(SourceVersion)
Run Code Online (Sandbox Code Playgroud)

这导致生成的版本号1.0.1234.- 即SourceVersion值为空,这在排队构建时导致VSO错误.我也尝试通过在变量前面添加Build.相同的结果来限定变量.为了测试,我已将构建号更改为以下格式:

$(MajorVersion).$(MinorVersion).$(BuildId).$(SourceBranch)
Run Code Online (Sandbox Code Playgroud)

这正确地导致了值 1.0.1234.refs_heads_master

我一直在使用Predefined Variables参考,Build.SourceVersion被列为全局变量.

我做错了什么,我遇到过一个错误,或者这是设计的,在构建排队时不可用?如果这是设计的,有没有办法在Build Number格式中自动包含简短的Git Commit ID?

这是我在VSO中设置内部版本号格式的地方: 这是我在VSO中设置内部版本号格式的地方

这是我在没有明确指定Git CommitId时看到的错误:

400:内部版本号格式字符串$(MajorVersion).$(MinorVersion).$(BuildId).$(SourceVersion)生成内部版本号0.1.1.其中包含无效字符,太长或以'.'结尾.内部版本号的最大长度为255个字符.不允许的字符包括'"','/',':','<','>','\','|','?','@'和'*'.

Vic*_*SFT 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()
Run Code Online (Sandbox Code Playgroud)