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

如何编写PowerShell或Bash脚本自动废弃Azure DevOps中两周未更新的Pull Request

自动废弃Azure DevOps中两周未更新的Pull Request脚本方案

嘿,刚入门Azure DevOps和脚本编写对吧?这个自动清理旧PR的需求很实用,我结合你已经熟悉的az命令,给你准备了PowerShell和Bash两种脚本方案,直接就能用!


PowerShell脚本方案

这个脚本会先拉取所有活跃PR,过滤出两周内未更新的,然后自动废弃它们。

# 配置参数:替换成你的仓库名和阈值天数
$repoName = "myrepo"
$daysThreshold = 14

# 计算两周前的UTC时间(和Azure DevOps返回的时间格式对齐,避免时区误差)
$cutoffDate = (Get-Date).AddDays(-$daysThreshold).ToUniversalTime()

# 获取所有活跃Pull Request,转为PowerShell可处理的对象
$activePRs = az repos pr list --repository $repoName --status "active" --output json | ConvertFrom-Json

# 遍历每个PR进行检查
foreach ($pr in $activePRs) {
    # 将PR的最后更新时间转换为DateTime对象
    $prLastUpdate = [DateTime]$pr.lastUpdateDate
    
    # 判断是否超过阈值
    if ($prLastUpdate -lt $cutoffDate) {
        Write-Host "⚠️ 准备废弃PR #$($pr.pullRequestId) - '$($pr.title)',最后更新时间:$prLastUpdate"
        # 执行废弃操作,**测试阶段可以先注释这行,只看输出确认逻辑**
        az repos pr update --id $pr.pullRequestId --status "abandoned"
    } else {
        Write-Host "✅ PR #$($pr.pullRequestId) - '$($pr.title)' 最近$daysThreshold天内更新过,跳过"
    }
}

使用注意事项:

  • 运行前确保已经通过az login登录Azure DevOps,并且拥有PR的废弃权限
  • 测试时先注释掉az repos pr update这一行,确认筛选出来的PR符合预期再执行实际操作
  • Azure DevOps返回的lastUpdateDate是UTC时间,脚本里也转成了UTC,避免时区差异导致误判

Bash脚本方案

如果你更习惯用Bash,这个脚本依赖jq工具来处理JSON数据,逻辑和PowerShell版本一致。

#!/bin/bash

# 配置参数:替换成你的仓库名和阈值天数
REPO_NAME="myrepo"
DAYS_THRESHOLD=14

# 计算两周前的UTC时间,格式和Azure DevOps返回的ISO 8601格式匹配
CUTOFF_DATE=$(date -u -d "-$DAYS_THRESHOLD days" +"%Y-%m-%dT%H:%M:%SZ")

# 获取活跃PR并逐个处理
az repos pr list --repository "$REPO_NAME" --status "active" --output json | jq -c '.[]' | while read -r pr; do
    PR_ID=$(echo "$pr" | jq -r '.pullRequestId')
    PR_TITLE=$(echo "$pr" | jq -r '.title')
    PR_LAST_UPDATE=$(echo "$pr" | jq -r '.lastUpdateDate')
    
    # 比较时间,判断是否超过阈值
    if [[ "$PR_LAST_UPDATE" < "$CUTOFF_DATE" ]]; then
        echo "⚠️ 准备废弃PR #$PR_ID - '$PR_TITLE',最后更新时间:$PR_LAST_UPDATE"
        # 执行废弃操作,**测试阶段可以先注释这行**
        az repos pr update --id "$PR_ID" --status "abandoned"
    else
        echo "✅ PR #$PR_ID - '$PR_TITLE' 最近$DAYS_THRESHOLD天内更新过,跳过"
    fi
done

使用注意事项:

  • 先安装jq工具:Debian/Ubuntu用sudo apt-get install jq,Mac用brew install jq
  • 同样需要先通过az login登录,确保权限足够
  • 测试时先注释废弃命令,确认筛选结果正确

额外建议

  1. 定时运行:可以把脚本放到Azure DevOps Pipeline里,设置定时触发器(比如每周日运行一次),实现全自动化
  2. 添加通知:废弃PR后可以加一步通知逻辑,比如通过Azure DevOps的通知功能或者脚本发送Teams/邮件通知PR作者
  3. 异常处理:可以给脚本加错误捕获,比如az命令失败时记录日志,避免脚本中途退出

内容的提问来源于stack exchange,提问作者Ashish Mishra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:48:13