【问题标题】:Target a pipeline against individual build agents, or against agent pools?针对单个构建代理或针对代理池的管道?
【发布时间】:2021-09-08 19:06:29
【问题描述】:

我们在 DevOps 上针对“默认”代理池中的单个构建代理(Windows 构建服务器)运行了多个管道。

我们想使用不同的工具测试新的构建服务器,因此我们会在该机器上创建一个新的构建代理,并为新代理创建新的管道,或者参数化管道(我认为这是可能的)。

是否有可能(并且明智)将两个代理放在同一个池中并直接控制使用哪个构建代理,或者创建第二个池的正确方法,每个池中有一个代理?

【问题讨论】:

    标签: azure-devops azure-pipelines


    【解决方案1】:

    这一切都取决于。如果您的管道很少,您可以使用单个代理池并将您想要测试的代理放入其中。为什么这对极少数人来说是可以的。因为您可以使用需求来控制将哪个代理分配给管道。但是由于两个代理都在同一个池中,如果您不明确执行此操作,它将占用池中任何可用的免费代理。

    为此,您需要首先设置自定义要求。请转到项目设置 -> 代理池 -> 选择池 -> 转到代理选项卡 -> 选择代理 -> 转到功能并添加用户定义的功能

    当您这样做时,您可以将其用作管道中的需求:

    pool:
      name: MyPool
      demands:
      - type -equals test
    

    但是,最好对您的稳定代理执行相同的操作并设置类型 ready 例如。然后,您将不得不修改所有管道以控制哪个管道应该采用哪个代理。

    另一种方法是单独的代理池并通过运行时参数对其进行参数化:

    parameters:
    - name: myString
      type: string
      default: 'default value!'
    - name: mynum
      displayName: 'My Number Param'
      type: number
      default: 123
    - name: mypool
      displayName: 'Pool'
      type: pool
      values:
      - ubuntu-latest
      - windows-latest
      - macos-latest
    
    pool: ${{ parameters.mypool }}
    
    steps:
    - script: echo ${{ parameters.myString }} was entered at runtime!
    - ${{ if not(eq(parameters.mynum, 123)) }}:
      - script: echo You overrode the default number to ${{ parameters.mynum }}
    

    点赞here

    在这种情况下,您只需要更改要让测试代理可供选择的管道。

    【讨论】:

    • 我们的管道目前根本没有pool 配置。如果我添加第二个池,现有管道是否仍会使用 Default - 看起来合乎逻辑,但我不想搞砸测试!
    • 所以你正在使用一些默认池。我不确定它是什么。但是,如果您在管道内定义一个池,它将使用已定义的池。
    • 在这里你会发现你cannot use two pools的信息
    • 这让我很困惑,你使用了一个参数让我选择哪个池,但如果我只能有一个池,这有什么意义?
    • 这是一个具有两个池的解决方案的建议。当您想在一个池中保留稳定的代理,而在另一个池中进行测试时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多