如何仅使用代理池代理而不是环境代理来运行部署作业

问题描述 投票:0回答:1
- deployment: Job_Start_Installation
    displayName: Start Installation
    cancelTimeoutInMinutes: 1
    environment:
      name: MyEnvironment
      resourceType: VirtualMachine
      tags: Active
    strategy:
      runOnce:
        deploy:
          steps:          
          - template: '../Steps/StartInstallation.yml'

这是我的一项部署作业的 YAML 代码。我目前正在使用环境在环境中的多台计算机上执行这些步骤。这个效果非常好。

现在,我想使用常规代理池代理实现相同的结果,而不再依赖环境或部署作业。这样做的最佳方法是什么。我发现存在一些东西,例如每个循环、具有并行属性的策略等...需要知道执行此操作的推荐和最佳方法是什么。

azure-devops tfs yaml azure-pipelines azure-pipelines-yaml
1个回答
0
投票

恐怕代理作业无法完成与部署作业完全相同的事情。但您可以使用 job.strategypool.demands 作为解决方法。

使用自托管代理时,您可以添加新的用户定义功能并使用

pool.demands
过滤具有目标功能的代理。对于您的情况,您可以添加
Build.BuildNumber
作为用户定义的功能。为了便于说明,我向我的自托管代理添加了一个名为“tag”且值为“test”的功能。

1。使用策略:并行

jobs:
- job: Test
  strategy:
    parallel: 4
  pool: 
    name: Default
    demands: tag -equals "test"
  steps:

使用此策略,同一个作业将被执行多次,具体取决于

parallel
的值。但您需要确保您购买了足够的并行作业,否则同一个作业可能会在同一个代理上运行多次。

2。使用策略:矩阵、maxParallel

jobs:
- job: Test
  strategy:
    matrix:
      VM1:
        agentName: VZIYAN620VM
      VM2:
        agentName: VTIANM336VM

  pool: 
    name: Default
    demands: 
    - Agent.Name -equals $(agentName)
    - tag -equals test

使用此策略,作业将尝试在每个代理上运行。它将在满足需求的代理上成功运行,而在其他代理上运行失败。但您需要在矩阵中定义所有代理的姓名。

© www.soinside.com 2019 - 2024. All rights reserved.