2016-07-27 12 views
3

Ist es normal, dass das vom GitVersion-Alias ​​zurückgegebene Objekt anders ist, wenn ich "OutputType" vorgebe oder diese Einstellung weglasse?Von GitVersion zurückgegebenes Objekt nicht konsistent

Wenn ich den Ausgabetyp angeben, werden die Eigenschaften des zurückgegebenen Objekts sind alle ‚Null‘, aber wenn ich die Einstellung nicht angeben, werden die Eigenschaften auf die erwarteten Werte

Zum Beispiel:

Task("Version") 
.Does(() => 
{ 
var versionInfo = GitVersion(new GitVersionSettings() 
{ 
    UpdateAssemblyInfo = true, 
    OutputType = GitVersionOutput.BuildServer 
}); 
Information("MajorMinorPatch: {0}", versionInfo.MajorMinorPatch); 
Information("FullSemVer: {0}", versionInfo.FullSemVer); 
Information("InformationalVersion: {0}", versionInfo.InformationalVersion); 
Information("LegacySemVer: {0}", versionInfo.LegacySemVer); 
Information("Nuget v1 version: {0}", versionInfo.NuGetVersion); 
Information("Nuget v2 version: {0}", versionInfo.NuGetVersionV2); 
}); 

die Ausgabe lautet:

MajorMinorPatch: [NULL] 
FullSemVer: [NULL] 
InformationalVersion: [NULL] 
LegacySemVer: [NULL] 
Nuget v1 version: [NULL] 
Nuget v2 version: [NULL] 

Wenn ich meine Aufgabe wie so ändern:

Task("Version") 
.Does(() => 
{ 
var versionInfo = GitVersion(new GitVersionSettings() 
{ 
    UpdateAssemblyInfo = false 
}); 
Information("MajorMinorPatch: {0}", versionInfo.MajorMinorPatch); 
Information("FullSemVer: {0}", versionInfo.FullSemVer); 
Information("InformationalVersion: {0}", versionInfo.InformationalVersion); 
Information("LegacySemVer: {0}", versionInfo.LegacySemVer); 
Information("Nuget v1 version: {0}", versionInfo.NuGetVersion); 
Information("Nuget v2 version: {0}", versionInfo.NuGetVersionV2); 
}); 

Die Ausgabe lautet:

MajorMinorPatch: 0.1.0 
FullSemVer: 0.1.0+1 
InformationalVersion: 0.1.0+1.Branch.master.Sha.5b2 
LegacySemVer: 0.1.0 
Nuget v1 version: 0.1.0 
Nuget v2 version: 0.1.0 

Antwort

3

Das ist "by design".

https://github.com/cake-build/cake/blob/develop/src/Cake.Common/Tools/GitVersion/GitVersionRunner.cs#L71

GitVersion verfügt über einen Standard-Ausgabetyp JSON, was bedeutet, dass die JSON Ausgabe, die die geltend gemachten alle Version enthält Zahlen zur Einsicht zur Verfügung. An diesem Punkt sammelt Cake diese JSON-Ausgabe, kombiniert sie zu einem GitVersion-Objekt und gibt dieses an das Cake-Skript zurück.

Wenn Sie OutputType = GitVersionOutput.BuildServer verwenden, gibt es keine JSON-Ausgabe. Stattdessen arbeitet GitVersion mit dem Build Server, auf dem es ausgeführt wird, unabhängig davon, ob es sich um TeamCity, AppVeyor oder was auch immer handelt, und stellt die angegebenen Versionsnummern über einen anderen Mechanismus zur Verfügung. d. h. entweder durch Setzen von Umgebungsvariablen oder durch Verwenden von Servicemeldungen, um den Build-Server darüber zu informieren. Als Ergebnis gibt es nichts wirklich für Cake zu konsumieren, um das GitVersion Objekt für die Rückgabe zu erstellen.

Der typische Weg wäre, zuerst GitVersion mit OutputType = GitVersionOutput.BuildServer zu starten und dann sofort wieder zu starten und die zurückgegebenen Variablen zu verwenden. Das ist eigentlich das, was wir in unserem eigenen Kuchen Skript tun:

https://github.com/cake-build/cake/blob/develop/build/version.cake#L38

Ausführen dieses ein zweites Mal eigentlich sollte sehr schnell sein, wie GitVersion tatsächlich das Ergebnis des ersten Laufes Caches. Es kann tatsächlich etwas geben, was wir in Cake tun können, um diese zwischengespeicherte Ausgabe zu lesen und diese als Ausgabe des Aufrufs zu verwenden. Wären Sie in der Lage, dies als ein Problem here zu erheben, damit wir es verfolgen können?

+0

Diese "durch Design" scheint das Prinzip der geringsten Überraschung für mich zu verletzen – Schneider

+1

Und ich stimme nicht zu. Das "Design" hier ist, dass es in Cake wirklich nichts zu machen gibt, ohne dass vorher in GitVersion eine Änderung vorgenommen wurde. Sobald dies erledigt ist, wird Cake die neue Funktionalität nutzen und die Variablen nach Bedarf zurückgeben. –