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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:35:20