我的目标是部署 NuGet 包(到内部 Nuget 服务器),根据日期和最后修订版自动增加版本,并包含 -beta 标记。
我正在使用 VSTS 使用 cake 构建和打包,构建号格式为$(BuildDefinitionName)_2.0.$(Date:yyMMdd)$(Rev:.r)。我有一个 .nuspec 清单文件,它指定:$version$和一个 NuGet Packager:
这很好用。但是现在,我想要一个 NuGet 打包器的选项,它生成一个标记为 beta 的包,因此在 VS NuGet 包管理器中显示为预发布。如果我使用 NuGet Packager 中附加的“-beta”对版本号进行硬编码,我可以做到这一点:
但是如何包含 -beta 标记和内部版本号?我想我需要在NuGet 参数中包含一个变量,该变量将返回$(BuildDefinitionName)_2.0.$(Date:yyMMdd)$(Rev:.r)加上“-beta”,但我不确定如何。我试图创建一个变量(下变量与版本号格式为值选项卡),然后在引用参数的NuGet(-Version变量theVariable),但由于错误的变量不支持接收。
我可能把这一切都弄错了,但是我的搜索没有找到关于如何从日期自动增加版本的任何提示,并包含一个 -beta 标签。
NuGet Packager 版本使用内部版本号,添加 -beta
我可以在我身边重现你的场景。在我看来,Nuget pack
带有内部版本号的任务不支持字符或数字。您可以检查此任务:
case "byBuildNumber":
tl.debug("Getting version number from build number")
if(tl.getVariable("SYSTEM_HOSTTYPE") === "release")
{
tl.setResult(tl.TaskResult.Failed, tl.loc("Error_AutomaticallyVersionReleases"));
return;
}
let buildNumber: string = tl.getVariable("BUILD_BUILDNUMBER");
tl.debug(`Build number: ${buildNumber}`);
let versionRegex = /\d+\.\d+\.\d+(?:\.\d+)?/;
let versionMatches = buildNumber.match(versionRegex);
if (!versionMatches)
{
tl.setResult(tl.TaskResult.Failed, tl.loc("Error_NoVersionFoundInBuildNumber"));
return;
}
if (versionMatches.length > 1)
{
tl.warning(tl.loc("Warning_MoreThanOneVersionInBuildNumber"))
}
version = versionMatches[0];
break;
这就是为什么当我们在我们的内部版本号中使用它们时,字段$(BuildDefinitionName)
和beta
不能出现在我们的包版本中的原因。
如果我们在 nuget 参数中指定了 nuget 版本,但此参数无法解析预定义的变量,例如$(Rev:.r)
.
这两种情况的局限性导致了您当前的问题。
解决此问题的解决方法是使用带有参数的 nuget 自定义任务-version $(Build.BuildNumber)
并$(BuildDefinitionName)
从我们的内部版本号格式移动字段,否则,我们仍然收到版本无效的错误。
所以,你 nuget custom 看起来像:
和内部版本号格式:
现在,您可以看到它运行良好:
笔记:
您说您使用 VSTS 使用 cake 构建和打包,但您发布的图像显示您在 TFS 2015中使用 NuGet Packagertask 。如果您确定使用 TFS 2015,恐怕上述解决方法对您不起作用。因为自定义 nuget 任务不支持 TFS 2015。
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句