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?
这是我在没有明确指定Git CommitId时看到的错误:
400:内部版本号格式字符串$(MajorVersion).$(MinorVersion).$(BuildId).$(SourceVersion)生成内部版本号0.1.1.其中包含无效字符,太长或以'.'结尾.内部版本号的最大长度为255个字符.不允许的字符包括'"','/',':','<','>','\','|','?','@'和'*'.
恐怕它无法$(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)