You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使Azure Pipelines独占锁在审批等待时不释放直至全流程结束?

解决Azure Pipelines整个流水线独占锁直至完成的问题

核心方案:绑定同一环境并配置lockBehavior: run

要让流水线从启动到所有阶段完成全程持有独占锁,需完成以下配置:

  • 将两个阶段(A/Plan、B/Apply)关联到同一个Azure Pipelines环境
  • 显式设置锁行为为run,即整个流水线生命周期持有锁

YAML配置示例

stages:
- stage: A
  displayName: Plan (CI)
  jobs:
  - job: Plan_Job
    # 绑定目标环境并设置锁行为为流水线全程持有
    environment:
      name: 'Terraform-Prod-Env'
      lockBehavior: run
    steps:
    - script: terraform init -backend-config=backend.tfvars
      displayName: 'Terraform Init'
    - script: terraform plan -out=tfplan
      displayName: 'Terraform Plan'

- stage: B
  displayName: Apply (CD)
  dependsOn: A
  jobs:
  - job: Apply_Job
    # 关联同一环境,继承run级锁行为
    environment: 'Terraform-Prod-Env'
    steps:
    - script: terraform apply tfplan
      displayName: 'Terraform Apply'

处理检查优先级问题

尽管UI无法调整环境检查的优先级顺序,但lockBehavior: run的特性可直接规避该问题:

  • 流水线启动时会立即尝试获取环境独占锁,此时手动审批等其他检查尚未触发
  • 流水线1成功获取锁后,流水线2会被直接阻塞在锁检查环节,无法进入任何阶段执行
  • 只有当流水线1完成所有阶段(包括B阶段的Apply)并释放锁,流水线2才会启动执行

关键验证点

  • 确保目标环境已启用独占锁:在Azure Pipelines环境的「检查」中添加「独占锁」并设为「必需」
  • 禁止仅在B阶段配置环境锁:若仅B阶段关联环境,锁只会在B阶段Job执行时持有,等待审批时会自动释放
  • 优先使用YAML显式配置:部分场景下UI的「整个流水线」锁设置可能因阶段未关联环境失效,YAML配置更可靠

内容的提问来源于stack exchange,提问作者Markus Peterson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:47:22