在构建定义中(在[变量]选项卡上),我试图使用简单表达式Build.Repository.Clean
定义自定义变量($[not(false)]
)。但是,当我在构建过程中打印变量时,无论使用什么表达式,Build.Repository.Clean
值始终为false
。
很奇怪,用类似$(FullBuild)
的定义(其中FullBuild
是另一个自定义变量)可以正常工作。
我想念什么吗?
注意:
背景故事:
尝试根据自定义变量Build.Repository.Clean
设置QuickBuild
变量(可在启动构建时由用户设置)。尝试指定$[not(variables.QuickBuild)]
(以及同一表达式的其他变体)–祝您好运。
作为表达式的一部分,您可以使用以下两种语法之一访问变量:
$[not(false)]
这不是支持格式。我已经在管道中定义了一些变量。
如前一个答案所述,任何字符串都被视为True。因此,在添加not()
表达式后,您打印的任何变量均为False
但是如果您随后设置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小组的建议,正在接受审查。
希望这会有所帮助。