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

如何自动删除Azure DevOps中的流水线环境(Pipeline->environment)

Azure DevOps 环境自动清理方案

一、API可用性说明

你找到的环境列表API是可用的,属于Azure DevOps REST API 7.0版本,可用于获取指定项目下的所有环境。此外还需用到删除环境的API端点:DELETE https://dev.azure.com/{organization}/{project}/_apis/distributedtask/environments/{environmentId}?api-version=7.0

二、PowerShell自动清理脚本

以下脚本可实现批量清理长期未使用的环境,核心逻辑为:获取所有环境→过滤出超过指定天数未使用的环境→批量删除。

param(
    [Parameter(Mandatory=$true)]
    [string]$OrganizationName,
    [Parameter(Mandatory=$true)]
    [string]$ProjectName,
    [Parameter(Mandatory=$true)]
    [string]$PAT,
    [int]$DaysInactive = 30
)

$baseUri = "https://dev.azure.com/$OrganizationName/$ProjectName/_apis/distributedtask/environments?api-version=7.0"
$headers = @{
    Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$PAT"))
}

# 获取项目下所有环境
$environments = Invoke-RestMethod -Uri $baseUri -Headers $headers -Method Get

# 计算清理阈值时间
$cutoffDate = (Get-Date).AddDays(-$DaysInactive)

# 筛选符合清理条件的环境:未使用过的取创建时间,已使用的取最后修改时间
$environmentsToDelete = $environments.value | Where-Object {
    if (-not $_.lastModified) {
        $_.createdOn -lt $cutoffDate
    } else {
        $_.lastModified -lt $cutoffDate
    }
}

if ($environmentsToDelete.Count -eq 0) {
    Write-Host "无符合清理条件的环境"
    exit 0
}

Write-Host "将删除以下$($environmentsToDelete.Count)个环境:"
$environmentsToDelete | ForEach-Object { Write-Host "- $($_.name) (ID: $($_.id))" }

# 执行删除操作
foreach ($env in $environmentsToDelete) {
    $deleteUri = "https://dev.azure.com/$OrganizationName/$ProjectName/_apis/distributedtask/environments/$($env.id)?api-version=7.0"
    try {
        Invoke-RestMethod -Uri $deleteUri -Headers $headers -Method Delete
        Write-Host "成功删除环境: $($env.name)"
    } catch {
        Write-Warning "删除环境$($env.name)失败: $_"
    }
}

三、Azure DevOps 流水线集成方案

将脚本集成到流水线,可实现定期自动执行清理任务:

1. 流水线YAML配置

trigger: none # 禁用代码提交触发,仅定时/手动执行

schedules:
- cron: "0 0 * * 0" # 每周日凌晨0点执行,可按需调整 cron 表达式
  displayName: 每周自动清理闲置环境
  branches:
    include:
    - main
  always: true

pool:
  vmImage: 'windows-latest'

steps:
- task: PowerShell@2
  inputs:
    filePath: 'Cleanup-InactiveEnvironments.ps1' # 替换为你的脚本文件名
    arguments: >
      -OrganizationName "你的组织名称"
      -ProjectName "你的项目名称"
      -PAT $(EnvCleanupPAT)
      -DaysInactive 30
  displayName: 执行闲置环境清理脚本

2. 关键配置说明

  • 在流水线的「变量」中添加秘密变量EnvCleanupPAT,值为拥有Environment (Read & Manage)权限的个人访问令牌(PAT)
  • 可根据业务需求调整DaysInactive参数(闲置天数阈值)和 cron 表达式(执行周期)

四、注意事项

  • 测试验证:首次执行前建议先注释删除逻辑,仅打印待删除环境列表,确认无误后再执行删除
  • 权限控制:确保PAT仅授予必要的环境管理权限,避免权限过大带来风险
  • 阈值调整:根据团队环境使用习惯,合理设置闲置天数阈值,避免误删仍在使用的环境

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:12:54