从GitVersion返回的对象不一致

时间:2016-07-27 03:23:18

标签: gitversion cakebuild

如果指定'OutputType'而忽略此设置,GitVersion别名返回的对象是否正常是不正常的?

如果我指定输出类型,返回对象的属性都是'null',但是当我省略设置时,属性被设置为期望值

例如:

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

输出结果为:

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);
});

如果我这样改变我的任务:

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

输出结果为:

UIAlertController

1 个答案:

答案 0 :(得分:3)

这是“按设计”。

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

GitVersion的默认输出类型为JSON,这意味着包含所有断言版本号的JSON输出可供检查。此时,Cake收集此JSON输出,将它们合并到一个GitVersion对象中,并将其返回给Cake脚本。

使用OutputType = GitVersionOutput.BuildServer时,没有JSON输出。相反,GitVersion与运行它的Build Server一起工作,无论是TeamCity,AppVeyor还是其他,并通过其他机制使断言的版本号可用。即通过设置环境变量,或使用服务消息来告诉构建服务器。因此,没有什么可以使用Cake来创建GitVersion对象以便返回。

解决这个问题的典型方法是首先使用OutputType = GitVersionOutput.BuildServer运行GitVersion,然后立即再次运行它,并使用返回的变量。这实际上就是我们在自己的Cake脚本中所做的事情:

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

第二次运行它应该非常快,因为GitVersion实际上缓存了第一次运行的结果。实际上,我们可以在Cake中执行一些操作来读取此缓存的输出,并将其用作调用的输出。您是否可以将此问题提升为问题here,以便我们跟踪它?