2015-09-16 23 views
7

Visual Studio Online'da (XAML yapı tanımları değil) yeni betik yapı özelliklerini kullanıyorum ve yapı sürüm numarası en son Git Commit kimliğini içermeye çalışıyorum Yapı Numarası Biçimini kullanarak hedef depo. Aşağıdakilerin yapı numarası formatı kullanıyorumBuild.SourceVersion VSO vNext Build boş

:

1.0.1234. için oluşturulan bir versiyon numarası ile sonuçlanır
$(MajorVersion).$(MinorVersion).$(BuildId).$(SourceVersion) 

- yani SourceVersion değeri bir yapı kuyruk zaman VSO bir hataya neden olur ki, boştur. Ayrıca, aynı sonucu Build. ile önekleyerek değişkene hak kazanmaya çalıştım. Bu, doğru 1.0.1234.refs_heads_master

I Predefined Variables referans kullanıyorum ve Build.SourceVersion genel değişken olarak listelenen bir değer ile sonuçlanmaktadır

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

: test etmek için, aşağıdaki biçimde yapı numarasını değiştirmiş .

Hatalı bir şey yapıyorum, bir hatayla karşılaştım mı yoksa tasarım gereği var mıdır ve yapı sıraya alındığında kullanılabilir değil mi? Bu, tasarım gereğince, Yapı Numarası Formatında kısa Git Komut Kimliği'ni otomatik olarak dahil etmenin herhangi bir yolu var mı?

400: yapı numarası This is where I set the build number format in VSO

Bu açıkça bir Git CommitId belirtmeyen yaptığım zaman gördüğüm hata: Ben VSO içinde yapı numarası biçimini ayarlamak nerede

Bu

olduğunu dize $ (MajorVersion). $ (MinorVersion). $ (BuildId). $ (SourceVersion) oluşturuldu bir yapı numarası 0.1.1. Geçersiz karakter (ler) içeriyorsa, çok uzun veya "." ile biter. Yapı numarasının maksimum uzunluğu 255 karakterdir. İzin verilmeyen karakterler şunlardır: "" ","/",": ", '<', '>', '\', '|', '?', '@' Ve '*'.

+0

ne elde edebilirsiniz sen $ (MajorVersion). $ (MinorVersion). $ (Build.BuildId). $ (Build.SourceVersion) 'ile tanımlanmıştır. Sadece hem VSO hem de TFS 2015 şirketlerinde doğrulandı. Çıktı şuna benzer: '1.0.20.41f2983578f720695227a7a8a41ed3d7437efc30'. Senin tarafında garip davranışlara sebep olan bir yazım hatası olmadığından emin misin? –

+0

@YanSklyarenko, Ben her zaman $ (MajorVersion). $ (MinorVersion). $ (Build.BuildId) kullanırsanız, yapı numarası biçiminde (InvalidMacroInBuildNumberException yazın) belirtilen makro $ (Build.SourceVersion) genişletilemiyor. Yapı numarası formatını tanımlamak için $ (Build.SourceVersion). Ayrıca, SourceVersion değişkeni, bu yapıya dahil edilen en son sürüm kontrol değişkendir. CommitId veya '41f2983578f720695227a7a8a41ed3d7437efc30' gibi bir şey olmamalıdır değişiklikleri kümesi (örneğin, CS1234). Önemli bir şey mi özledim? –

+0

@Vicky, hmm, bu farklı bir şey, sanırım. Bu istisna (InvalidMacroInBuildNumberException) gibi görünüyor, yapı numarası biçimi geçersiz demektir. Demek istediğim, Major.Minor.Build.Revision'ın hepsinin numaralar olması, bu kimliklerin ve karmaların değil. $ (Build.SourceVersion) çalışmalarının makro kısmı çalışır, ancak yapı numarasında kullanamazsınız. Diğer yorumunuz - Git'teki commit ID'si, uzun esrar, 'CS1234' TFVC değişikliklerinin formatıdır. –

cevap

2

Korkarım, yapı numarası biçiminde $(SourceVersion)'u kullanamıyorum.Ancak, yapı numarasını $(SourceVersion) olarak değiştirmek için PowerShell'i kullanabileceğinizi düşünüyorum ve PowerShell'i derleme işleminize dahil etmeniz gerekir. .

[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

Bu kullanışlı görünüyor. Önceden tanımlanmış değişkenleri kullanarak bir çözüm bulamazsam bunu aklımda tutacağım. – GaryJL

+0

Bunun şimdilik mümkün olan tek çözüm olduğunu söyleyebilirim. –

+0

Merhaba @Yan, çözümünüzü kullanıyorum ama hata alıyorum, System.InvalidOperationException: Temel kimlik doğrulaması, sunucuya güvenli bir bağlantı gerektirir. Bu satırın üstünde IBuildDetail buildDetail = buildServer.GetBuild (BuildUrl); –

2

I: detaylar için bu linki

Ve PowerShell tanımlayabilirsiniz benzer olması $(Build.SourceVersion)'u kullanabiliyordu, ancak yalnızca yapılışı otomatik olarak tetiklendiğinde (Sürekli entegrasyonda). Bir çalıştırdığınızda çünkü boş çıkıyor -

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

Aynı sorunu yaşadım, çözdünüz mü? – MonDeveloper

+0

@MonDeveloper Evet, yukarıdaki biçim dizesini kullandığımda otomatik olarak CI tetiklenen yapıları doldurur. Ayrıca, kaynakların manuel olarak sıraya alınırken Kaynak Sürümü belirtilmesi mümkün görünmektedir, ayrıntılar için Will'in cevabına bakınız. – NeoGarRiGus

1

NeoGarRiGus:

Build queue screenshot Ben İnşa aşağıdaki sayı biçimini kullanıyorum

: Ben elle sıraya yalnızca boş olarak çıkıyor manuel derleme, doldurmak için Kaynak Sürüm alanına girmeniz gerekir.otomatik değer CI girişler zaman Dev çekinizin içinde ancak bir yapı sıraya zaman el Kaynak Versiyon girmenizi sağlar pop-up boş alan vardır:

Source Version Field in VSTS