如何在Azure DevOps的代理池中指定代理运行流水线

4
我们使用Azure DevOps进行iOS应用程序的CI/CD。我们提供带有虚拟机的mac机器,并在这些虚拟机上安装了Azure DevOps代理。
由于代理虚拟机的不稳定性,有时我们的流水线会失败。如何在流水线中提供一个选项,以在池中的特定代理上运行作业? 在Jenkins和TeamCity中都很容易实现。但是,在这里,我们使用YAML定义流水线,似乎更加棘手。
在流水线中,是否可以使用具有机器列表参数及其能力条件,并在代理中定义其能力的方式来解决问题?

我相信这个之前的答案就是你要找的。 - DreadedFrost
2个回答

7
请注意:1.我希望在点击“运行作业”时能够选择它,2.可用代理的列表应该可以作为下拉菜单显示,3.默认情况下,它应该使用池中的随机代理。
为了在YAML文件中实现这一点,我们可以定义两个运行时参数,其中一个参数用于从下拉列表中选择指定的代理,另一个参数用于决定是否使用特定代理或默认的随机代理。
换句话说,我们需要使用一个参数来选择需求,另一个参数来禁用/启用先前的需求。如果我们禁用了先前的需求,Azure devops将默认使用随机代理。
我设置了以下示例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 }}

在上面的示例中,使用语法${{ if eq(parameters.IfNeedDemands, true) }}:的参数IfNeedDemands用于确定是否启用需求。然后使用参数AgentSelect来选择私有代理。

enter image description here

我测试过它按照我的预期工作,你可以检查一下看是否符合你的需求。


1
太好了!这正是我一直在寻找的,我今天会测试它并告诉你我的想法 :) - Fishman
@Fishman,好的。期待听到您的声音。祝您有美好的一天。 - Leo Liu
@Fishman,这个问题解决了吗?如果没有,您能否告诉我关于这个问题的最新信息? - Leo Liu
它在我的情况下似乎不起作用,但我今天会再试一次。我的设置有一些更复杂的模板等。 - Fishman

1
我在评论中进行了说明。然而,这里是有关如何配置的官方文档

这已经是一些进展,但请记住:
  1. 我希望在单击“运行作业”时选择它,
  2. 可用代理列表应该以下拉菜单的形式呈现,
  3. 默认情况下,它应该从池中随机选择一个代理。
- Fishman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接