如何删除AzDevops中通过PublishBuildArtifacts@1上传的文件?
删除Azure DevOps中通过PublishBuildArtifacts@1发布的文件/文件夹方法
PublishBuildArtifacts@1上传的文件会存储在Azure DevOps的文件容器中,无法通过代理本地命令直接删除,必须通过Azure DevOps REST API实现。以下是具体实现方案:
核心方案:调用Azure DevOps REST API
1. 准备必要权限
- 创建个人访问令牌(PAT),需包含**Build Artifacts (Read & Manage)**权限;如果在Pipeline中执行,可直接使用系统自带的
System.AccessToken,但需要给流水线服务账号配置对应权限。 - 从日志中提取目标文件容器ID:比如你提供的日志
#/232343434/test,其中232343434就是容器ID,/test是文件存储的路径。
2. PowerShell脚本实现删除
本地执行脚本
# 配置参数 $orgUrl = "https://dev.azure.com/你的组织名" $projectName = "你的项目名" $containerId = "232343434" # 替换为你的容器ID $pathToDelete = "/test" # 要删除的路径,可指定单个文件如/test/testr.json $pat = "你的PAT令牌" # 转换认证信息 $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat")) # 调用API删除 $deleteUrl = "$orgUrl/$projectName/_apis/wit/attachments/delete?containerId=$containerId&path=$pathToDelete&api-version=7.1-preview.1" Invoke-RestMethod -Uri $deleteUrl -Method Post -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
Pipeline中集成执行
推荐使用AzurePowerShell任务,利用系统令牌认证,无需手动管理PAT:
- task: AzurePowerShell@5 inputs: azureSubscription: '你的服务连接名' ScriptType: 'InlineScript' Inline: | $orgUrl = "https://dev.azure.com/你的组织名" $projectName = "$(System.TeamProject)" $containerId = "232343434" # 替换为你的容器ID $pathToDelete = "/test" # 替换为目标路径 # 使用系统令牌认证 $token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$env:SYSTEM_ACCESSTOKEN")) $deleteUrl = "$orgUrl/$projectName/_apis/wit/attachments/delete?containerId=$containerId&path=$pathToDelete&api-version=7.1-preview.1" Invoke-RestMethod -Uri $deleteUrl -Method Post -Headers @{Authorization=("Basic {0}" -f $token)} azurePowerShellVersion: 'LatestVersion' env: SYSTEM_ACCESSTOKEN: $(System.AccessToken)
关键注意事项
- 如果要删除整个容器下的所有内容,将
$pathToDelete设为"/"即可。 - 确保认证账号(PAT或服务账号)拥有目标项目的Build Artifacts管理权限,否则会返回403错误。
- 避免在脚本中硬编码PAT,可将其存储在Azure DevOps的变量组中并标记为保密变量。
内容的提问来源于stack exchange,提问作者ElonMusk
相关产品推荐
相关产品推荐

