如何删除声称由版本保留的 Azure DevOps 构建定义?

Aut*_*ant 6 azure-devops

我正在尝试删除 Azure DevOps 构建定义,但它不允许我删除,因为它说:

“与请求的管道相关的一个或多个构建由版本保留。管道和构建不会被删除。”

然而,没有明显的方法来查看哪个版本导致构建被保留。当然,我尝试在线搜索,但如何在 Web UI 中执行此操作的所有示例/屏幕截​​图都显示了 Azure DevOps 网站几次迭代之前的 UI,因此所有控件看起来都不再相同。例如,我在任何地方都没有看到锁定图标。

如何找到保留这些构建定义的版本,以便删除它们,然后删除构建定义?

谢谢!

Mer*_*SFT 5

当您打开构建管道查看其详细构建记录时,您可以看到相关的发布名称及其链接:

在此输入图像描述

在旧的管道版本上,有一个锁图标,可以明显地让我们知道它被保留。事实上,锁形图标不仅仅意味着它被release保留,手动构建retain也会显示这个图标。但是,当我们扩展新的冲刺时,我们似乎错过了这个明显的图标。

作为获取发布保留的构建列表的解决方法,这里有一个简短的脚本可以帮助您使用 Rest api 实现:

$token = "{PAT token}"

$url ="https://dev.azure.com/{org name}/{project name}/_apis/build/builds?api-version=5.1"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get

$results = $response.value | Where {$_.retainedByRelease -eq "true"} #|

Write-Host "results = $($results.id | ConvertTo-Json -Depth 100)"
Run Code Online (Sandbox Code Playgroud)

首先,使用 list builds api 获取当前项目中的所有构建。然后对于发布保留的构建,因为有一个参数可以指示它:retainedByRelease这里我用来$_.retainedByRelease -eq "true"获取发布实际保留的构建列表:

在此输入图像描述

上面的脚本非常通用,可以在 Powershell-ise 和 Powershell Command Line 以及 VSTS 的 Powershell 任务中使用,无需进行任何更改。

11/19更新:

根据@Auth的评论,如果想要获取其关联的版本,最简单的方法是找到构建,然后检查其关联的发布管道,如我上面分享的屏幕截图所示。

如果这不能满足您的需求,并且我们之前使用的 API 中不包含任何版本信息,那么在这里,您需要使用这个 API:Releases - Get Release

GET https://vsrm.dev.azure.com/{org name}/{project name}/_apis/release/releases?sourceId={project id}:{build definition id}&api-version=5.1
Run Code Online (Sandbox Code Playgroud)

在此 API 中,您需要指定project id:build definition id来过滤版本。

在此输入图像描述


如果图标丢失,将让相应的团队知道并尝试在未来的冲刺中添加它。