如何通过Azure DevOPS中的池在指定代理上运行管道

时间:2020-08-07 09:15:02

标签: ios azure-devops azure-pipelines

我们将Azure DevOps用于iOS应用程序的CI / CD。我们为Mac计算机提供了板载VM,并且在这些VM上安装了Azure DevOps代理。

有时我们的管道由于代理VM不稳定而失败。如何在管道中提供选项以在池中的特定代理上运行作业?在Jenkins和TeamCity中都可以轻松实现。但是在这里,我们将YAML定义用于管道,这似乎更加棘手。

带有机器列表的参数以及管道中的能力条件以及代理中定义的能力是否可行?

2 个答案:

答案 0 :(得分:1)

我留下了评论来说明这一点。但是,这里是offical documentation,说明如何配置。

答案 1 :(得分:1)

但请记住:1.我很想在单击“运行作业”时选择它,2.可用代理列表应作为下拉菜单出现。3.默认情况下,它应使用池中的随机代理

要在YAML文件中实现此目的,我们可以定义两个Runtime parameters,其中一个参数用于从下拉列表中选择指定代理,一个参数用于决定是使用特定代理还是使用默认为随机代理。

换句话说,我们需要使用一个参数来选择需求,并使用另一个参数来禁用/启用先前的需求。如果我们禁用以前的需求,则默认情况下,Azure开发人员将使用随机代理。

我设置了以下示例YAML文件:

parameters:
- name: IfNeedDemands
  type: boolean
  default: False


- name: AgentSelect
  displayName: Agent Select
  type: string
  values:
  - VsAgent1
  - VsAgent2
  - VsAgent3
  - VsAgent4

trigger: none

jobs:
- job: build
  
  displayName: build
  pool: 
    name: MyPrivateAgent
    ${{ if eq(parameters.IfNeedDemands, true) }}:
      demands: Agent.Name -equals ${{ parameters.AgentSelect }}

  steps:
  - script: echo The value is ${{ parameters.AgentSelect }}

在以上示例中,使用语法为IfNeedDemands的参数${{ if eq(parameters.IfNeedDemands, true) }}:用于确定是否启用需求

然后使用参数AgentSelect选择专用代理。

enter image description here

我测试了它是否可以按预期工作,您可以检查它是否满足您的需求。