cfb*_*fbd 9 azure-devops azure-pipelines
我在 azure devops 中有 2 个构建代理和 8 个管道。如果为管道 A 启动了一个运行,并且为同一管道触发了另一个运行,Azure Devops 将在另一个代理上启动第二个运行,而无需等待第一个代理完成。
如何让 Azure Devops 等到第一次运行完成后再开始第二次运行?
编辑:使用 yaml 管道而不是旧的构建/发布管道。
看起来你可以通过使用 yaml 文件中的触发器选项来做到这一点:
trigger:
batch: true
Run Code Online (Sandbox Code Playgroud)
请注意,此值默认为 false(因此当为空时),但它可能仅在已定义触发器时?
文档在这里:https : //docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema?view= azure-devops &tabs=schema#triggers
小智 5
可以通过设置具有排他锁检查的环境来防止并发运行。这允许使用 Microsoft 托管的代理,而不仅仅是自托管的代理。它还不需要像需求那样将管道分配给特定代理。
锁定行为:顺序
阶段:
- 舞台:舞台
工作:
- 部署:工作
环境:我的环境
战略:
运行一次:
部署:
脚步:
...
这将强制同一管道的多个队列按队列顺序依次运行。不同的管道必须使用不同的环境,否则会互相阻塞。
小智 5
我能够通过执行以下操作来做到这一点(防止多个构建同时执行一个阶段):
build_concurrency_lock。Pipelines您可以通过-> Library->添加它Variable Groups。请务必为资源添加“排它锁”。azure-pipelines.yml.stages:
# Code Pipeline
- stage: BuildStage
displayName: "Build"
# These next three lines make builds run in serial. We need to do this since we use a shared "builds" environment in azure - see https://stackoverflow.com/a/73694320/1072030, https://learn.microsoft.com/en-us/azure/devops/pipelines/library/variable-groups?view=azure-devops&tabs=yaml, and https://learn.microsoft.com/en-us/azure/devops/release-notes/2021/sprint-190-update#support-for-sequential-deployments-rather-than-latest-only-when-using-exclusive-lock-checks
lockBehavior: sequential
variables:
- group: build_concurrency_lock # relies on a "build_concurrency_lock" Library variable group existing and having an "Exclusive Lock" "Approvals and checks" setup.
Run Code Online (Sandbox Code Playgroud)
我认为您可以在管道的代理作业上向池中添加需求,以便由于相同的指定条件,它将使用同一个代理运行。
首先,在代理中添加一项Capability 。
然后,在您的 YAML 中,将需求添加到池中。
pool:
name: {agent pool name}
demands: Limit -equals DisAbleParallel
Run Code Online (Sandbox Code Playgroud)
它的格式是demands:{CapabilityName} -equals {CapabilityValue}.
当您指定代理需求时,管道将仅与该代理一起运行。当 A 运行时,第二个不会同时运行,因为前一个正在运行,代理正在使用。这样,第二个将运行到前一个结束。
| 归档时间: |
|
| 查看次数: |
5620 次 |
| 最近记录: |