Azure Pipeline集成Black Duck版本限制:自动清理旧版本方案咨询
自动清理Black Duck旧版本的Azure Pipeline实现方案
可以通过PowerShell调用Black Duck的REST API实现自动清理旧版本,完全集成到Azure Pipeline中解决版本数量超限的问题,具体实现如下:
核心思路
利用Black Duck提供的API查询指定项目的所有版本,按创建时间排序后,当版本数量超过10个时自动删除最早的多余版本,将这个逻辑封装成PowerShell脚本,在流水线的Black Duck扫描任务前执行。具体实现步骤
准备Black Duck API凭证
在Black Duck中创建具备项目版本删除权限的API Token,然后在Azure DevOps的变量组(或流水线变量)中安全存储以下信息:BLACKDUCK_URL:你的Black Duck实例地址BLACKDUCK_API_TOKEN:生成的API TokenTARGET_PROJECT_NAME:需要清理版本的目标项目名称
编写PowerShell清理脚本
以下是可直接使用的示例脚本,会自动查询版本列表、判断数量并删除旧版本:# 加载流水线变量 $blackDuckUrl = $env:BLACKDUCK_URL $apiToken = $env:BLACKDUCK_API_TOKEN $projectName = $env:TARGET_PROJECT_NAME # 构建API请求头 $headers = @{ "Authorization" = "token $apiToken" "Accept" = "application/json" } # 获取目标项目的UUID $projectsResponse = Invoke-RestMethod -Uri "$blackDuckUrl/api/projects?q=name:$projectName" -Headers $headers -Method Get $projectUuid = $projectsResponse.items[0].uuid if (-not $projectUuid) { Write-Error "未找到指定项目:$projectName" exit 1 } # 获取项目下所有版本,按创建时间升序排序(最早的版本排在前面) $versionsResponse = Invoke-RestMethod -Uri "$blackDuckUrl/api/projects/$projectUuid/versions?sort=createdAt" -Headers $headers -Method Get $versions = $versionsResponse.items # 计算需要删除的版本数量 $maxVersions = 10 $deleteCount = $versions.Count - $maxVersions if ($deleteCount -gt 0) { Write-Host "当前版本数$($versions.Count)超过限制$maxVersions,将删除$deleteCount个旧版本" $versionsToDelete = $versions | Select-Object -First $deleteCount foreach ($version in $versionsToDelete) { Write-Host "开始删除版本:$($version.versionName)(创建时间:$($version.createdAt))" try { Invoke-RestMethod -Uri "$blackDuckUrl/api/projects/$projectUuid/versions/$($version.uuid)" -Headers $headers -Method Delete Write-Host "版本$($version.versionName)删除成功" } catch { Write-Warning "删除版本$($version.versionName)失败:$($_.Exception.Message)" } } } else { Write-Host "当前版本数$($versions.Count)未超过限制$maxVersions,无需清理" }在Azure Pipeline中配置任务
在流水线的Black Duck扫描任务之前添加一个PowerShell任务:- 选择「Inline」脚本类型,粘贴上述脚本
- 在「环境变量」中添加:
BLACKDUCK_URL=$(BLACKDUCK_URL) BLACKDUCK_API_TOKEN=$(BLACKDUCK_API_TOKEN) TARGET_PROJECT_NAME=$(TARGET_PROJECT_NAME) - 确保变量组已链接到流水线,且
BLACKDUCK_API_TOKEN设置为「保密」状态
注意事项
- 确认API Token拥有足够权限:必须包含项目版本的删除权限
- 脚本默认按创建时间删除最早版本,若需按更新时间排序,可将
sort=createdAt改为sort=updatedAt - 建议先在测试环境验证脚本逻辑,避免误删重要版本
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

