如何编写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登录,确保权限足够 - 测试时先注释废弃命令,确认筛选结果正确
额外建议
- 定时运行:可以把脚本放到Azure DevOps Pipeline里,设置定时触发器(比如每周日运行一次),实现全自动化
- 添加通知:废弃PR后可以加一步通知逻辑,比如通过Azure DevOps的通知功能或者脚本发送Teams/邮件通知PR作者
- 异常处理:可以给脚本加错误捕获,比如
az命令失败时记录日志,避免脚本中途退出
内容的提问来源于stack exchange,提问作者Ashish Mishra
相关产品推荐
相关产品推荐

