我如何取消&;使用PowerShell删除队列中正在等待的生成

我如何取消&;使用PowerShell删除队列中正在等待的生成,powershell,tfs,build,azure-pipelines,azure-devops-rest-api,Powershell,Tfs,Build,Azure Pipelines,Azure Devops Rest Api,由于长时间运行的构建,各种后续的在线构建需要更长的时间来执行 是否有一种方法可以取消和删除队列中正在等待的生成,并让位于使用PowerShell或REST API的最新触发生成?以下代码段将检查所有TFS生成,获取正在进行但未启动的生成,然后取消它们 $tfsUrl = "http://{server}:{port}/{organization}/{collection}/{project}" # TFS Base URL $BuildDefsUrl = "$tfs

由于长时间运行的构建,各种后续的在线构建需要更长的时间来执行


是否有一种方法可以取消和删除队列中正在等待的生成,并让位于使用PowerShell或REST API的最新触发生成?

以下代码段将检查所有TFS生成,获取正在进行但未启动的生成,然后取消它们

$tfsUrl = "http://{server}:{port}/{organization}/{collection}/{project}" # TFS Base URL
$BuildDefsUrl = "$tfsUrl/_apis/build/definitions?api-version=2.0" # TFS build definitions URL
$BuildsUrl = "$tfsUrl/_apis/build/builds"  #TFS Builds URL

$Builds = (Invoke-RestMethod -Uri ($BuildDefsUrl) -Method GET -UseDefaultCredentials).value | Select id,name # get all builds 
#for filtering use : |  Where-Object {$_.name -like "*Your Pattern*"}

foreach($Build in $Builds)
{
    $command = "$($BuildsUrl)?api-version=3.2-preview.3&resultFilter=inprogress&definitions=$($Build.id)&queryOrder=finishTimeDescending"
 
    $Ids = (((Invoke-RestMethod -Method Get -Uri $command -UseDefaultCredentials).value) | where status -like "*notStarted*").id # get waiting builds id's

    foreach($id in $Ids)
    {
            $uri =  "$($BuildsUrl)/$($id)?api-version=2.0" # TFS URI
            $body = '{"status":4}' # body 
            $result = Invoke-RestMethod -Method Patch -Uri $uri -UseDefaultCredentials -ContentType 'application/json' -Body $body -Verbose #cancel  build
    }
} 
上面的例子非常古老。下面的代码片段适用于Azure Devops-

$PATToken=“PAT_走到这里”
$AuthHeader=@{Authorization='Basic'+[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(“:$($PATToken)”))}
$azureDevops=”https://dev.azure.com/{组织}/{项目}”
$BuildsUrl=“$azureDevops/_API/build/builds”
$filterBuilds=“$($BuildsUrl)?statusFilter=notStarted&api版本=6.0”
(调用RestMethod-Method Get-Uri$filterBuilds-Headers$AuthHeader)。值|%{
$uri=“$($BuildsUrl)/$($u3; id)?api版本=6.0”#Azure Devops uri
$body='{“状态”:4}'#body
$result=Invoke RestMethod-Method Patch-Uri$Uri-Headers$AuthHeader-ContentType'application/json'-Body$Body-Verbose#取消构建
写入输出“$($.definition.name)cancaled”
}

我们可以对特定的构建定义执行此操作吗?当然可以,将:| Where Object{$\.name-eq“build definition”}添加到$Builds命令中