我有一个管道,可以清理虚拟机、将其转换为映像并删除所有资源。我希望使用同一管道删除虚拟机,而不捕获映像。我可以使所有阶段都具有条件,但是当我最终没有一个阶段是没有条件的时候,我不断地看到这个问题的公认解决方案是使dependsOn成为条件的,如下所示。deleteVM参数是布尔值。
Parameters:
- name: deleteVM
displayName: "just delete it"
type: boolean
default: false
- stages:
- stage: aStage
${{ if eq(parameters.deleteVM, 'false') }}:
dependsOn: anActualStage
${{ if eq(parameters.deleteVM, 'true') }}:
dependsOn: []
问题是,当我这样做,并试图运行管道与第二个条件为真,然后它错误时,解析管道YAML:已定义“dependsOn”。
P.S.我已经看了以下内容,它们暗示我这样做是“正确”的:
2条答案
按热度按时间brqmpdu11#
不要使用2个if语句,而是使用if/else,或者干脆把else完全省略掉,因为你要把depends on设置为一个空列表。
pgky5nke2#
@4c74356b41关于使用if-else的答案可能是你最好的选择。
yaml的工作方式是,只有当
if
语句解析为true时,您示例中的dependsOn
才会真正添加到“编译”的yaml文件中。因此,您的变量一定有问题,因为看起来您的两个逻辑语句都解析为true。我真的不明白为什么,因为从您的示例来看,这似乎是不可能的。但这是我能看到你得到你所看到的错误的唯一方法。