(TFS构建的自定义变量)不能使用表达式填充

问题描述 投票:0回答:1

在构建定义中(在[变量]选项卡上),我试图使用简单表达式Build.Repository.Clean定义自定义变量($[not(false)])。但是,当我在构建过程中打印变量时,无论使用什么表达式,Build.Repository.Clean值始终为false

很奇怪,用类似$(FullBuild)的定义(其中FullBuild是另一个自定义变量)可以正常工作。

我想念什么吗?

注意:

  • 使用TFS 2018

背景故事:

尝试根据自定义变量Build.Repository.Clean设置QuickBuild变量(可在启动构建时由用户设置)。尝试指定$[not(variables.QuickBuild)](以及同一表达式的其他变体)–祝您好运。

tfs azure-devops tfsbuild
1个回答
0
投票

作为表达式的一部分,您可以使用以下两种语法之一访问变量:

  • 索引语法:变量['MyVar']
  • 属性取消引用语法:variables.MyVar

$[not(false)]这不是支持格式。我已经在管道中定义了一些变量。enter image description here

如前一个答案所述,任何字符串都被视为True。因此,在添加not()表达式后,您打印的任何变量均为False

enter image description here

但是如果您随后设置Build.Repository.Clean =“在变量bx之上”。即使变量print为False,无论它打印什么,它都是一个字符串。

任何其他字符串→True

这就是Build.Repository.Clean = True的原因。

希望这更加清楚。您也可以在此链接中查看示例:Runtime expressions do not create boolean variables


实际上,我们现在使用string而不是布尔值的变量。

正如您所看到的,我们的文档指出not()函数“将值转换为布尔值以进行评估”。

请参阅字符串在Expressions中的工作方式:

String

至布尔值:“(空字符串)→False,其他任何字符串→True

因此,基本上,任何字符串(variables.QuickBuild)都被视为true,然后,当用not()函数包装时,它总是做not(true)。这就是为什么$[not(variables.QuickBuild)]值始终为假且有意义的原因。

由于它们是字符串,因此,作为一种解决方法,您可能可以使用脚本来定义变量,然后使用eq()函数检查字符串是否相等,而不是依赖于类型转换。 eq(variables['myVar'], 'true')

您也可以在下面查看类似的链接:

带有第一个链接,这已经是我们的PG小组的建议,正在接受审查。

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.