- 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 代码。我目前正在使用环境在环境中的多台计算机上执行这些步骤。这个效果非常好。
现在,我想使用常规代理池代理实现相同的结果,而不再依赖环境或部署作业。这样做的最佳方法是什么。我发现存在一些东西,例如每个循环、具有并行属性的策略等...需要知道执行此操作的推荐和最佳方法是什么。
恐怕代理作业无法完成与部署作业完全相同的事情。但您可以使用 job.strategy 和 pool.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
使用此策略,作业将尝试在每个代理上运行。它将在满足需求的代理上成功运行,而在其他代理上运行失败。但您需要在矩阵中定义所有代理的姓名。