Azure DevOps Server 2019:任务执行条件

Azure DevOps Server 2019: condition for task execution

在 Azure DevOps 服务中,我使用参数使任务执行成为可选的,例如:

...
parameters:
- name: createObj
  displayName: 'Create Object?'
  type: boolean
  default: true

...
jobs:
- job: build
  pool:
    name: Default
  steps:
  - ${{ if eq(parameters.createObj, true) }}:
    - template: ./templates/create-object.yml

Azure DevOps Server 2019 不支持参数,知道如何添加这样的条件吗?

Azure DevOps Server 2019 doesn't support parameters, any ideas how such condition could be added?

是的,根据 this ticket Azure DevOps Server 2019 doesn't support parameters well. So I suggest you can try conditional jobs/steps via variables instead parameters, for more details about Conditions 语法。

由于Azure Devops Server目前对参数的支持还不是很好,所以不建议在你的场景中使用模板。 (变量 不能 用于条件模板)。您可以直接在 azure-pipeline.yml 文件中扩展这些步骤,如下所示:

jobs:
- job: build
  pool:
    name: Default
  steps:
    - task: CmdLine@2
      inputs:
        script: 'echo This is first build task'
      condition: {Add your custom condition here in Step level.}
    - task: CmdLine@2
      inputs:
        script: 'echo This is second build task'

- job: test
  condition: {Add your custom condition here in Job level.}
  pool:
    name: Default
  steps:
    - task: CmdLine@2
      inputs:
        script: 'echo This is first test task'
    - task: CmdLine@2
      inputs:
        script: 'echo This is second test task'

您可以在Job/Step层添加条件来判断一个Job/Step是否会运行。

两个不同方向的示例:

1.Define yaml 中的变量(硬编码):

variables:
  WhetherToRunCmd:true

jobs:
- job: build
  pool:
    name: Default
  steps:
    - task: CmdLine@2
      inputs:
        script: 'echo This is first build task'
      condition: ne(variables.WhetherToRunCmd,false)
    - task: CmdLine@2
      inputs:
        script: 'echo This is second build task'

那么第一个cmd任务默认会运行,当我们把WhetherToRunCmd:true改成WhetherToRunCmd:false时会跳到运行。

2.Usequeue time variable,不需要在yml文件中定义变量:

编辑 yaml 管道并选择变量:

定义变量 WhetherToRunJob 并在排队时启用可设置:

然后在 yml 中使用类似这样的东西:

- job: test
  condition: ne(variables.WhetherToRunJob,false)

那么这个job默认会运行,当我们使用Queue with parameters option:

将值改为false时跳到运行

我觉得variables+condition也可以满足你运行steps/jobs有条件的需求。您也可以根据需要修改条件,例如 and(succeed(),eq(...)...) 或什么。