根据条件参数在池上执行 Azure Devops 作业

use*_*684 8 azure-devops azure-pipelines azure-pipelines-yaml

我正在尝试根据条件在特定池上执行 Azure DevOps 作业。目标是在自托管代理和微软代理之间切换。这是配置:

parameters:
  custom_agent: true

jobs:
  - job: Test
    displayName: Test job
  - ${{ if eq(parameters.custom_agent, true) }}:
    - pool:
      name: mypool
      demands:
        - agent.os -equals Linux
  - ${{ if eq(parameters.custom_agent, false) }}:
    - pool:
        vmImage: 'ubuntu-latest'
    steps:
      - task: npmAuthenticate@0
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

有任何想法吗 ?

小智 9

下面的例子解决了我的要求

parameters:
  - name: 'vmImage'
    type: string
    default: 'ubuntu-latest'
  - name: 'agentPool'
    type: string
    default: ''

jobs:
  - job: 'Example'
    pool:
      ${{ if ne(parameters.agentPool, '') }}:
        name: ${{ parameters.agentPool }}
      ${{ if eq(parameters.agentPool, '') }}:
        vmImage: ${{ parameters.vmImage }}
    steps:
      - script: example
Run Code Online (Sandbox Code Playgroud)

  • 注意:如果池定义位于作业定义内,则此方法可以正常工作,但由于某种原因,如果池定义位于较高位置(例如在发布级别),则不允许这样做。 (3认同)

Vit*_*Liu 4

我们可以指定步骤、作业或阶段的运行条件。我们可以使用不同的条件条目配置管道中的作业,并根据这些条件设置需求。

骨架版本如下所示:

parameters:
- name: custom_agent
  displayName: Pool Image
  type: boolean
  default: True

jobs:
  - job: selfhostedagent
    condition: eq(${{ parameters.custom_agent }}, True)
    displayName: 'self_hosted agent'
    pool:
      name: Default
      demands:
        - Agent.Name -equals WS-VITOL-01
    steps:
      - script: echo self_hosted agent

  - job: hostedagent
    condition: eq(${{ parameters.custom_agent }}, False)
    displayName: 'hosted agent'
    pool:
      vmImage: 'ubuntu-latest'
      
    steps:
      - script: echo hosted agent
Run Code Online (Sandbox Code Playgroud)

更新1

另外,我们可以配置任务模板,然后在步骤中使用该模板。

结果:

在此输入图像描述