2015-09-16 48 views
7

我在Visual Studio Online(不是XAML構建定義)中使用新的腳本化構建功能,並且試圖讓構建版本號包含最新的Git Commit ID目標存儲庫使用Build Number格式。Build.SourceVersion在VSO中是空白vNext構建

我使用下面的生成數字格式:

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

這導致1.0.1234.生成版本號 - 即其中的SourceVersion值爲空,排隊構建時導致錯誤的VSO。我也嘗試通過在Build.前加上相同的結果來限定變量。爲了測試,我已經改變了版本號的格式如下:

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

這正確地導致的1.0.1234.refs_heads_master

我已經使用Predefined Variables參考和Build.SourceVersion被列爲全局變量的值。

我做錯了什麼,我有沒有遇到過錯誤,或者是有人設計,並且在構建隊列時不可用?如果這是專門設計的,是否有任何方法可以自動在構建數字格式中包含簡短的Git提交ID?

這是我設置VSO的內部版本號格式爲: 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,我總是得到 「無法展開在建數字格式(類型InvalidMacroInBuildNumberException)指定的宏$(Build.SourceVersion)」 異常,如果我使用$(MajorVersion)$(MinorVersion)$(Build.BuildId) $(Build.SourceVersion)來定義內部版本號的格式。另外,SourceVersion變量是包含在此版本中的最新版本控制變更。的commitid或變更集編號(CS1234,例如),其不應當是這樣的「41f2983578f720695227a7a8a41ed3d7437efc30」。我錯過了重要的事情嗎? –

+0

@Vicky,嗯,我想這是另一回事。看起來像那個異常('InvalidMacroInBuildNumberException')意味着內部版本號格式無效。我的意思是,它期望Major.Minor.Build.Revision都是數字,而不是那些ID和散列。 $(Build.SourceVersion)的宏部分起作用,但不能在內部版本號中使用它。你的其他評論 - 在Git中提交ID是那個長哈希,'CS1234'是TFVC變更集的格式。 –

回答

2

恐怕無法在構建數字格式。不過,我認爲你可以使用PowerShell來改變內部版本號是$(SourceVersion)使用$(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

我能夠使用$(Build.SourceVersion),但僅當構建在提交時自動觸發(在持續集成上)時。它原來是隻有當我手動隊列爲空:

Build queue screenshot

我用下面的版本號格式爲:

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

我有同樣的問題,你解決了嗎? – MonDeveloper

+0

@MonDeveloper是的,它會自動對CI-觸發填充,當我使用上面的格式字符串構建。當手動排隊構建時,似乎也可以指定源版本,請參閱Will的回答以獲取詳細信息。 – NeoGarRiGus

1

NeoGarRiGus - 原來空的,因爲當你運行手動編譯你必須輸入Source Version字段才能填充它。自動值CI輸入時,開發支票在,但是當你排隊構建手動存在彈出一個空白的領域,允許你進入源碼版本:

Source Version Field in VSTS