如何在Azure DevOps YAML流水线中实现审批后延迟自定义时间发布生产版本?
在Azure DevOps YAML流水线实现审批后延迟自定义时间发布生产版本
核心思路
结合环境审批 + 自定义延迟任务实现:先通过环境审批控制发布准入,审批通过后执行自定义延迟逻辑,最后完成生产环境部署。
具体实现步骤
1. 创建带审批的生产环境
在Azure DevOps项目的「环境」页面创建生产环境,配置部署前审批:
- 添加需要参与审批的人员/安全组
- 可按需设置审批超时时间(可选)
2. 在YAML流水线中整合审批与延迟逻辑
在生产部署阶段引用配置好的生产环境触发审批,审批通过后添加PowerShell脚本实现自定义延迟,最后执行部署步骤。
示例YAML代码:
stages: - stage: Build jobs: - job: BuildJob steps: - script: echo "构建并打包产物" displayName: 'Build Artifact' - stage: DeployToProduction dependsOn: Build jobs: - deployment: DeployProd environment: 'Production' # 关联带审批的生产环境 strategy: runOnce: deploy: steps: - task: PowerShell@2 displayName: '自定义延迟发布' inputs: targetType: 'inline' script: | # 通过流水线变量传入延迟分钟数,支持触发时自定义 $delayMinutes = $(DelayMinutes) Write-Host "开始延迟 $delayMinutes 分钟..." Start-Sleep -Seconds ($delayMinutes * 60) Write-Host "延迟结束,启动生产部署" - script: echo "执行生产环境部署脚本/步骤" displayName: 'Deploy to Production'
3. 配置延迟时间变量
在流水线的「变量」中添加DelayMinutes变量,触发流水线时可手动输入需要延迟的分钟数,实现动态自定义延迟时长。
进阶优化(可选)
如果需要指定具体发布日期时间而非分钟数,可修改PowerShell脚本,计算当前时间到目标时间的差值后执行休眠:
$targetTime = [DateTime]::ParseExact($(TargetDeploymentTime), "yyyy-MM-dd HH:mm", $null) $delaySeconds = ($targetTime - (Get-Date)).TotalSeconds if ($delaySeconds -gt 0) { Write-Host "等待至 $targetTime,需延迟 $delaySeconds 秒..." Start-Sleep -Seconds $delaySeconds } else { Write-Host "目标时间已过,立即启动部署" }
此时需在流水线变量中添加TargetDeploymentTime,格式为yyyy-MM-dd HH:mm,触发时输入具体发布时间即可。
注意事项
- 确保流水线代理在延迟期间保持在线,避免代理断开导致任务失败
- 审批通过后延迟任务立即开始计时,计时结束后自动执行部署
- 若需取消延迟,可手动终止流水线的生产部署阶段
内容的提问来源于stack exchange,提问作者Radhika
相关产品推荐
相关产品推荐

