Azure Pipelines 中的自定义条件无法取消

问题描述 投票:0回答:1

我在天蓝色管道的一个阶段有两项工作

作业 1:部署 Terraform

工作 2:部署 Ansible

我的deployAnsible工作有以下条件:

            condition: |
              and(
                or(
                  succeeded(),
                  eq(dependencies.deployTerraform.result, 'Skipped')
                ),
                eq(${{ parameters.runAnsible}}, 'true')
              )

这个条件逻辑工作正常,但是当它就位时,我无法取消deployAnsible作业 - 该阶段只有在作业完成后才会完全取消。如果我删除条件并取消阶段,则作业会立即取消。

我已经阅读了这篇文章,它回避了这种行为,但并没有真正解释如何处理它

azure-devops azure-pipelines
1个回答
0
投票

基于“取消构建时的管道行为”的声明。

如果您的条件未考虑阶段/作业/步骤的父阶段的状态,则如果条件评估为 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}
    . . .
  1. 当阶段A正在运行且阶段B尚未开始时,如果取消阶段A,则阶段B将被跳过,因为阶段A未成功,并且阶段B中的所有作业也会得到跳过。

  2. 在阶段B中,当作业B1正在运行且作业B2尚未开始运行时,如果取消阶段B,则阶段B被取消,作业B1被取消,但作业B2被取消如果条件评估为“true

    ”, 仍将开始运行。如果条件评估为“
    false
    ”,作业 B2 将被跳过(而不是取消)。

  3. 在阶段B中,当作业B2正在运行时,如果取消阶段B,阶段B将被取消,作业B2也会被取消。


© www.soinside.com 2019 - 2024. All rights reserved.