我在天蓝色管道的一个阶段有两项工作
作业 1:部署 Terraform
工作 2:部署 Ansible
我的deployAnsible工作有以下条件:
condition: |
and(
or(
succeeded(),
eq(dependencies.deployTerraform.result, 'Skipped')
),
eq(${{ parameters.runAnsible}}, 'true')
)
这个条件逻辑工作正常,但是当它就位时,我无法取消deployAnsible作业 - 该阶段只有在作业完成后才会完全取消。如果我删除条件并取消阶段,则作业会立即取消。
我已经阅读了这篇文章,它回避了这种行为,但并没有真正解释如何处理它
基于“取消构建时的管道行为”的声明。
如果您的条件未考虑阶段/作业/步骤的父阶段的状态,则如果条件评估为 true,则您的阶段、作业或步骤将运行,即使其父阶段已取消。如果跳过其父级,则您的阶段、作业或步骤将不会运行。
在一个正在运行的阶段中,如果一个作业有通过‘
condition
’键显式设置的条件,当您取消该阶段时,该作业是否会被取消取决于它是否已经开始运行。
如果在作业开始之前取消阶段,则当条件评估为“
true
”时,该作业仍将运行。
如果作业运行时阶段被取消,作业也会被取消。
以下示例作为参考。
# azure-pipelines.yml
stages:
- stage: A
jobs:
- job: A1
. . .
# Stage B depends on stage A by default. So, it will implicitly check whether stage A is succeeded by default.
- stage: B
jobs:
- job: B1
. . .
# Job B2 depends on B1 and has condition explicitly set.
- job: B2
dependsOn: B1
condition: {the condition}
. . .
当阶段A正在运行且阶段B尚未开始时,如果取消阶段A,则阶段B将被跳过,因为阶段A未成功,并且阶段B中的所有作业也会得到跳过。
在阶段B中,当作业B1正在运行且作业B2尚未开始运行时,如果取消阶段B,则阶段B被取消,作业B1被取消,但作业B2被取消如果条件评估为“true
false
”,作业 B2 将被跳过(而不是取消)。
在阶段B中,当作业B2正在运行时,如果取消阶段B,阶段B将被取消,作业B2也会被取消。