2015-09-16 6 views
7

Sto utilizzando le nuove funzionalità di creazione di script in Visual Studio Online (non le definizioni di build XAML) e sto cercando di includere il numero di versione build dell'ultimo Git Commit ID del repository di destinazione utilizzando il formato numero build.Build.SourceVersion è vuoto in VSO vNext Build

Sto usando il seguente formato numero di build:

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

che si traduce in un numero di versione generato dei 1.0.1234. - vale a dire il valore SourceVersion è vuoto, che causa un errore nella VSO quando in coda una build. Ho anche provato a qualificare la variabile con il prefisso Build. con lo stesso risultato. Per prova, ho cambiato il numero di build per il seguente formato:

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

Ciò si traduce correttamente in un valore di 1.0.1234.refs_heads_master

Sono stato con il riferimento Predefined Variables e Build.SourceVersion è elencato come una variabile globale .

Sto facendo qualcosa di sbagliato, ho riscontrato un bug o è questo di progettazione e non disponibile al momento in cui la compilazione è in coda? Se questo è in base alla progettazione, esiste un modo per includere automaticamente il breve Git Commit ID nel formato numero build?

Questo è dove ho impostato la build formato numerico in VSO: This is where I set the build number format in VSO

Questo è l'errore che vedo quando non specifica esplicitamente un Git CommitId:

400: Il numero di build stringa di formato $ (MajorVersion). $ (MinorVersion). $ (BuildId). $ (SourceVersion) ha generato un numero di build 0.1.1. che contiene caratteri non validi, è troppo lungo o termina con ".". La lunghezza massima di un numero di build è 255 caratteri. I caratteri non consentiti includono "" ","/",": ", " < ","> "," \ "," | ","? "," @ "E" * ".

+0

posso ottenere quello che descritto con '$ (MajorVersion). $ (MinorVersion). $ (Build.BuildId). $ (Build.SourceVersion)'. Ho appena verificato su VSO e TFS 2015 on-premise. L'output è simile a questo: '1.0.20.41f2983578f720695227a7a8a41ed3d7437efc30'. Sei sicuro che non sia un errore di battitura a causare uno strano comportamento dalla tua parte? –

+0

@YanSklyarenko, ottengo sempre "Impossibile espandere la macro $ (Build.SourceVersion) specificata nel formato numero di build (tipo InvalidMacroInBuildNumberException)" eccezione se uso $ (MajorVersion). $ (MinorVersion). $ (Build.BuildId) . $ (Build.SourceVersion) per definire il formato del numero di build. Inoltre, la variabile SourceVersion è l'ultima modifica del controllo della versione inclusa in questa build. CommitId o numero di changeset (CS1234, ad esempio), che non dovrebbe essere qualcosa come "41f2983578f720695227a7a8a41ed3d7437efc30". Mi sono perso qualcosa di importante? –

+0

@Vicky, hmm, questa è una cosa diversa, suppongo. Sembra che l'eccezione ('InvalidMacroInBuildNumberException') indichi che il formato del numero di build non è valido. Voglio dire, si aspetta che Major.Minor.Build.Revision siano tutti numeri, non quegli ID e hash. La parte macro di $ (Build.SourceVersion) funziona, ma non è possibile utilizzarla nel numero di build. Il tuo altro commento: l'ID commit in Git è quel lungo hash, 'CS1234' è il formato del changeset TFVC. –

risposta

2

Purtroppo non è possibile utilizzare $(SourceVersion) nel formato numero build Tuttavia, penso che è possibile utilizzare PowerShell per modificare il numero di build in modo da essere $(SourceVersion) e che è necessario includere PowerShell nel processo di compilazione. . questo link per i dettagli

E si può definire la PowerShell per essere simile a:

[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

Questo sembra utile. Lo terrò a mente se non trovo una soluzione utilizzando le variabili predefinite. – GaryJL

+0

Direi che questa è l'unica soluzione possibile per ora. –

+0

Salve @Yan, sto utilizzando la tua soluzione ma ricevo un errore, System.InvalidOperationException: l'autenticazione di base richiede una connessione sicura al server. Proprio su questa riga IBuildDetail buildDetail = buildServer.GetBuild (BuildUrl); –

2

i è stato in grado di utilizzare $(Build.SourceVersion), ma solo quando i build sono stati attivati ​​automaticamente su commit (su Integrazione continua). Essa risulta essere vuota solo se io coda manualmente:

Build queue screenshot

Sto utilizzando il seguente Costruire formato numerico:

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

Ho avuto lo stesso problema, l'hai risolto? – MonDeveloper

+0

@MonDeveloper Sì, si riempie automaticamente su build attivate da CI quando utilizzo la stringa di formato sopra. Sembra anche possibile specificare la versione sorgente quando si accodano le build manualmente, vedere la risposta di Will per i dettagli. – NeoGarRiGus

1

NeoGarRiGus - si scopre vuoto perchè quando si esegue una compilazione manuale devi inserire il campo Versione sorgente affinché possa essere compilato.Gli ingressi CI che apprezzano automaticamente quando in un controllo Dev, ma quando si coda una build manualmente c'è un campo vuoto nella finestra pop-up che consente di inserire la versione Fonte:

Source Version Field in VSTS