Tfs Azure管道运行时不会自动删除

Tfs Azure管道运行时不会自动删除,tfs,azure-devops,azure-pipelines,Tfs,Azure Devops,Azure Pipelines,我们有两个构建YAML管道来在TFS上运行测试,一个用于前端测试,另一个用于后端测试。我们使用两个自托管的windows代理来运行这些构建,我们使用的是Azure DevOps Server 2020。自从我们开始运行管道以来,我们注意到TFS数据库的大小在膨胀。我们已尝试编辑保留设置,以仅保留最新的版本,但无论我们更改什么,它们仍会被保存 以下是我们的保留设置: $token = "{PAT}" $url="https://{instance}/{collecti

我们有两个构建YAML管道来在TFS上运行测试,一个用于前端测试,另一个用于后端测试。我们使用两个自托管的windows代理来运行这些构建,我们使用的是Azure DevOps Server 2020。自从我们开始运行管道以来,我们注意到TFS数据库的大小在膨胀。我们已尝试编辑保留设置,以仅保留最新的版本,但无论我们更改什么,它们仍会被保存

以下是我们的保留设置:

$token = "{PAT}"
$url="https://{instance}/{collection}/{project}/_apis/build/builds/?api-version=6.0"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

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

ForEach( $build in $response.value )
{
    if ((-not $build.keepForever) -and (-not $build.retainedByRelease)) {
        $url="https://{instance}/{collection}/{project}/_apis/build/builds/$($build.id)?api-version=6.0"
        $deleteResponse = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Delete -ContentType application/json
        Write-Host "Deleted" $url
    }
} 
收集设置

项目管道设置

项目管道发布保留:

编辑:测试保留设置:

结束编辑

我们的YAML管道没有任何特定的保留设置,因此我的理解是它默认为项目管道设置。然而,情况似乎并非如此。我们的运行时间可以追溯到11月,也就是我们第一次创建管道的时候。我还可以手动检查哪些版本被保留和未被保留:

保留版本的示例

未保留构建的示例

然而,这些运行永远不会被删除。我对保留工作原理的理解是否不正确,TFS不应该自动删除构建?或者,我是否需要以某种方式更改Azure DevOps设置,以便在保留设置不再适用于构建时自动删除它

还值得一提的是,我们确实有一个发布管道,尽管我们在创建它之前就遇到了这些问题,并且发布管道只依赖于master,但也没有删除任何功能运行

我确实发现这篇文章似乎只适用于经典的UI管道编辑器。有没有一种方法可以将此应用于我的YAML管道

编辑2

所以我确实在这方面取得了一些进展。我编写了一个脚本,将删除保留设置未保留的所有运行:

$token = "{PAT}"
$url="https://{instance}/{collection}/{project}/_apis/build/builds/?api-version=6.0"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

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

ForEach( $build in $response.value )
{
    if ((-not $build.keepForever) -and (-not $build.retainedByRelease)) {
        $url="https://{instance}/{collection}/{project}/_apis/build/builds/$($build.id)?api-version=6.0"
        $deleteResponse = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Delete -ContentType application/json
        Write-Host "Deleted" $url
    }
} 

这会很好地删除所有运行。然而,从我在文档中可以看出,这应该由TFS自动完成。是否有任何我可以筛选的事件日志源或每天的任何特定时间可供检查,这可能导致我找到实际删除运行的位置?

您是否可以检查此文档并按照步骤查看它是否对您有帮助:?因此我们查看了该文档,但它似乎仍然不起作用。它给出了删除一个运行需要满足的四个条件,看起来大多数运行都满足了所有条件。1.我们已经跑了4个多月了,时间已经足够了。2.它不是最近在保存的分支上运行的,因为大多数运行不在主分支上。3.它们没有被任何人标记为要保存。4.它们不会被发布管道保留,因为在我们实现发布管道之前就已经发生了这种情况。您可以在其他团队项目中尝试吗?另外,在服务器机器上查看事件查看器中的事件日志,以查看是否有有用的信息。遗憾的是,我们没有任何其他可以使用管道进行测试的项目。我还试图查看事件日志,但看不到任何异常情况。一个潜在的问题是,在最初创建管道之后,我们确实对保留策略进行了更改。这会导致这些问题吗?我不认为这会导致这个问题。您可以尝试一个新项目,看看是否可以重现此问题。