在构建定义中(在“变量”选项卡上),我尝试使用简单表达式Build.Repository.Clean
定义自定义变量($[not(false)]
)。但是当我在构建过程中打印变量时,无论使用什么表达式,Build.Repository.Clean
的值始终为false
。
奇怪的是,使用类似$(FullBuild)
(其中FullBuild
是另一个自定义变量)的定义就可以了。
我想念什么吗?
注意:
背景故事:
尝试根据自定义变量Build.Repository.Clean
设置QuickBuild
变量(可以由用户在开始构建时设置)。尝试指定$[not(variables.QuickBuild)]
(以及同一表达式的其他变体)–祝您好运。
这是现在的工作方式(但我宁愿使用QuickBuild
而不是FullBuild
-只是想不出如何对变量求反):
答案 0 :(得分:0)
更新3:
好吧,忽略它是否在队列时间内更改了清理操作。对于您要寻找的内容,可以尝试以下格式:
Build.Repository.Clean=$[not(eq(variables.QuickBuild,'True'))]
QuickBuild=True
,Build.Repository.Clean=False
,QuickBuild=False
,则Build.Repository.Clean.Clean=True
例如:
我已经在“获取源代码”步骤中设置了clean选项,Clean = true
Build.Repository.Clean=$(FullBuild)
FullBuild=false
现在,当我对构建进行排队时,然后尝试在排队期间更改FullBuild=false
时间。
您认为,Build.Repository.Clean应该更改为False,否则将不执行clean操作。 但是事实是,Build.Repository.Clean仍然为True,并且执行清理。
即使您没有在队列时间内更新FullBuild=false
的值,也可以直接在构建管道中设置值FullBuild=false
。这也不会使用。
反之,如果您在“获取源代码”步骤中将Clean设置为false。无论您在队列建立期间在FullBuild
或Build.Repostiory.Clean
中输入哪种值。
在构建管道期间它不会清理。
结论:在队列时间内无法更改清理操作。这根本不与任何表达式相关。不管为Build.Repository.Clean
设置什么样的值。
更新2
再次回答您的问题和所有评论。您的真正目标似乎是在队列时间基于另一个自定义变量分配清除选项。
由于您无法在队列时间内更改Build.Repository.Clean
。因此,您正在尝试使用此替代方法。不支持。 无法在队列时间分配清理选项。
您可能必须在构建管道中预定义此变量。
还要看一下这个问题:How to clean build using self-hosted agent when queuing
在您的方案中,您可以创建两个构建管道作为一个丑陋的解决方法。一个用于增量构建(在获取源代码步骤中使用Disable the Clean option,或使用变量Build.Repository.Clean
= False),另一个用于启用“清理”选项。
希望很明显。
答案 1 :(得分:0)
Expressions用于初始化自定义变量时(在Variables
选项卡上),不进行评估。即变量值最终是一个string
,其值等于您的表达式(例如'$[not(<whatever>)]'
)。稍后,当该变量在期望boolean
的上下文中使用时-仍然不会得到评估,而是得到type-casted,并且任何非空字符串都会产生true
。
另一方面,发生了变量替换,即值$(MyVar)
被替换为MyVar
的值。
内置变量在某种意义上似乎是特殊的,如果您override
,则此过程从一开始就发生,并且其值立即被结果值替换。
注意-这可能(也可能不)与this有关。
底线::您不能使用表达式来覆盖内置变量的值。