已定义Azure管道YAML依赖项

2uluyalo  于 2023-02-13  发布在  其他
关注(0)|答案(2)|浏览(163)

我有一个管道,可以清理虚拟机、将其转换为映像并删除所有资源。我希望使用同一管道删除虚拟机,而不捕获映像。我可以使所有阶段都具有条件,但是当我最终没有一个阶段是没有条件的时候,我不断地看到这个问题的公认解决方案是使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.我已经看了以下内容,它们暗示我这样做是“正确”的:

brqmpdu1

brqmpdu11#

不要使用2个if语句,而是使用if/else,或者干脆把else完全省略掉,因为你要把depends on设置为一个空列表。

- stages:
  - stage: aStage
    ${{ if eq(parameters.deleteVM, 'false') }}:
      dependsOn: anActualStage
    ${{ else }}:
      dependsOn: []

  - stage: aStage
    ${{ if eq(parameters.deleteVM, 'false') }}:
      dependsOn: anActualStage
pgky5nke

pgky5nke2#

@4c74356b41关于使用if-else的答案可能是你最好的选择。
yaml的工作方式是,只有当if语句解析为true时,您示例中的dependsOn才会真正添加到“编译”的yaml文件中。因此,您的变量一定有问题,因为看起来您的两个逻辑语句都解析为true。我真的不明白为什么,因为从您的示例来看,这似乎是不可能的。但这是我能看到你得到你所看到的错误的唯一方法。

相关问题