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

如何实现Azure Pipeline在触发15天后运行第二个流水线?

解决方案:Azure Pipeline 15天后延迟触发第二个流水线

首先明确:无法通过cron实现这个需求。因为cron是基于固定时间规则(比如每天凌晨1点)触发,没办法关联第一个流水线的实际执行时间来动态计算15天后的触发点。

下面是两种可行的实现方式:

方式一:存储队列+Logic Apps(推荐)

  • 第一步:在第一个流水线的末尾添加一个PowerShell/Bash任务,计算当前时间+15天的UTC时间,然后把第二个流水线的触发信息(如流水线ID、必要参数)写入Azure存储队列,同时设置消息的可见性超时时间为15天。这样消息会在15天后才会被读取到。
  • 第二步:创建一个Azure Logic App,配置触发器为「当存储队列中有消息变为可见时」,然后添加「触发Azure DevOps流水线」的动作,填入第二个流水线的组织、项目、ID等信息。当15天后队列消息可见时,Logic App就会自动触发第二个流水线。

方式二:调用Azure DevOps REST API创建延迟触发的流水线任务

在第一个流水线的最后一步,通过PowerShell或Bash脚本调用Azure DevOps的REST API,直接预约15天后触发第二个流水线:

  1. 计算当前UTC时间+15天后的时间戳,格式为yyyy-MM-ddTHH:mm:ss.fffZ
  2. 调用Queues a build API,传入第二个流水线的ID和预约触发时间
  3. 注意:要在第一个流水线的「代理作业」设置中开启「允许脚本访问OAuth令牌」,确保脚本能拿到权限调用API

示例PowerShell代码:

# 获取当前UTC时间并计算15天后的触发时间
$currentUtc = (Get-Date).ToUniversalTime()
$triggerTime = $currentUtc.AddDays(15).ToString("yyyy-MM-ddTHH:mm:ss.fffZ")

# 构造请求体
$body = @{
    definition = @{ id = 123 } # 替换为你的第二个流水线ID
    schedule = @{ triggerTime = $triggerTime }
} | ConvertTo-Json

# 调用API触发流水线
$orgName = "你的组织名"
$projectName = "你的项目名"
$apiUrl = "https://dev.azure.com/$orgName/$projectName/_apis/build/builds?api-version=7.1-preview.7"

Invoke-RestMethod -Uri $apiUrl -Method Post `
    -Headers @{ Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" } `
    -Body $body -ContentType "application/json"

不推荐的方式:流水线内添加延迟任务

如果第二个流水线是部署流水线,也可以在第一个流水线触发它后,在第二个流水线的开头加一个延迟任务(比如用PowerShell的Start-Sleep)等待15天。但这种方式会持续占用Azure DevOps代理资源15天,成本高且不稳定,除非是非常特殊的场景,否则不建议使用。

内容的提问来源于stack exchange,提问作者pooja agiwal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:01:06