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

Azure Pipeline集成Black Duck版本限制:自动清理旧版本方案咨询

自动清理Black Duck旧版本的Azure Pipeline实现方案

可以通过PowerShell调用Black Duck的REST API实现自动清理旧版本,完全集成到Azure Pipeline中解决版本数量超限的问题,具体实现如下:

  • 核心思路
    利用Black Duck提供的API查询指定项目的所有版本,按创建时间排序后,当版本数量超过10个时自动删除最早的多余版本,将这个逻辑封装成PowerShell脚本,在流水线的Black Duck扫描任务前执行。

  • 具体实现步骤

    1. 准备Black Duck API凭证
      在Black Duck中创建具备项目版本删除权限的API Token,然后在Azure DevOps的变量组(或流水线变量)中安全存储以下信息:

      • BLACKDUCK_URL:你的Black Duck实例地址
      • BLACKDUCK_API_TOKEN:生成的API Token
      • TARGET_PROJECT_NAME:需要清理版本的目标项目名称
    2. 编写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,无需清理"
      }
      
    3. 在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:31:05