5

我正在尝试根据条件在特定池上执行 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

在此处输入图像描述

有任何想法吗 ?

4

4 回答 4

2

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

骨架版本如下所示:

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

更新1

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

结果:

在此处输入图像描述

于 2020-08-03T09:38:51.227 回答
2

如果您使用非虚拟机池,另一种有条件地选择池的方法:

variables:
- ${{ if eq(parameters.custom_agent, true) }}:
  - name: testJobPool
    value: mypool
- ${{ if eq(parameters.custom_agent, false) }}:
  - name: testJobPool
    value: mypool_second

jobs:
- job: Test
  displayName: Test job
  pool:
    name: $(testJobPool)
  steps:
    - task: npmAuthenticate@0

这已被证明是有效的。

于 2021-03-25T18:52:12.387 回答
2

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

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
于 2021-10-29T15:56:32.797 回答
-1

看起来池不是作业类型的有效属性

尝试将您的工作切换到部署类型

工作:

  - deployment: Test
  - ${{ if eq(parameters.custom_agent, true) }}:
     pool:
      name: mypool
      demands:
        agent.os -equals Linux
    strategy:
        runOnce:    
          deploy:
            steps:
于 2020-07-31T15:34:56.500 回答