我正在使用Cake Build脚本来构建.NET软件,我需要将唯一的内部版本号烘焙到DLL中,主要是因为我们需要知道所用的确切二进制文件,以防需要调试带有二进制文件的转储文件
第一件事,这是我当前的Cake版本任务:
Task("Version")
.Does(() =>
{
Information("Versioning software for configuration {0} of {1}...", configuration, solution);
var gitVersionSettings = new GitVersionSettings {
UpdateAssemblyInfo = true
};
var Version = GitVersion(gitVersionSettings);
});
非常简单,但是它会使用正确的FileVersion和ProductVersion更新程序集文件,从而更新DLL。
其次,我发现Azure DevOps中的内部版本号无处不在。以下是一些示例:
2.1.0-PullRequest0019.7
2.0.1-beta.1+4
2.1.0-alpha.4
2.1.0-PullRequest0017.4
2.0.1-beta.1+2
2.0.0
0.1.0+70
这是最后7个内部版本号,它们来自不同分支的内部版本,包括将修补程序合并到master中,然后在dev中。我注意到,对于此构建管道,内部版本号是空的,因此我认为它只是使用我的最后一组标记(到目前为止仅标记为2.0.0和2.0.1)将任何内容转储到构建管道中。
存在三个问题:
编辑
我发现您可以使用$(BuildId)获得由Azure DevOps生成的唯一内部版本号,以便回答问题1。我还认为我可以通过以下参数将内部版本号从Azure DevOps传递给Cake脚本:精细。现在,本地构建以及如何为其获取唯一的构建编号已成为一个问题。另外,什么格式应该保存我的版本。我正在尝试对标签使用1.0.0格式,因此我应该将第四个数字作为不断增加的内部版本号吗?以及如何将其保存到AssemblyInfo.cs文件中?
从第一次编辑开始编辑...运行成功的构建后,内部版本号从内部版本ID更改为其他“ 2.1.0-alpha.7”,我不知道为什么,因为我指定使用在我的管道中建立ID。
答案 0 :(得分:1)
我建议您执行以下操作:
grep "This was the message we received" + above result in mylogs.log
即运行两次GitVersion。第一种使用BuildServer输出类型,这将导致GitVersion更新Azure DevOps内部版本号,以匹配存储库的断言版本号。
第二次执行使您可以像当前一样将版本号捕获到本地变量中。
之所以必须这样做,是因为GitVersion既不能更新构建服务器版本,也不能输出用于生成声明的版本号的JSON文件,该文件将在第二次调用中返回。
注意::您可能只想在实际在Azure DevOps上运行时才执行此操作,因此将第一次执行置于自己的if块中。
在我的Cake.Recipe项目中,我对这个问题的建议使用了类似的方法:
https://github.com/cake-contrib/Cake.Recipe/blob/develop/Cake.Recipe/Content/gitversion.cake#L56