I have a PowerShell script running in an Azure DevOps pipeline. This script makes an API call to queue a build:
<code>$Uri = 'https://dev.azure.com/{MY ORG}/{MY PROJECT}/_apis/build/builds?api-version=5.0'
Invoke-RestMethod -Uri $Uri -ContentType "application/json" -Headers headers -Method POST -Body ($buildBody | ConvertTo-Json)
</code>
<code>$Uri = 'https://dev.azure.com/{MY ORG}/{MY PROJECT}/_apis/build/builds?api-version=5.0'
Invoke-RestMethod -Uri $Uri -ContentType "application/json" -Headers headers -Method POST -Body ($buildBody | ConvertTo-Json)
</code>
$Uri = 'https://dev.azure.com/{MY ORG}/{MY PROJECT}/_apis/build/builds?api-version=5.0'
Invoke-RestMethod -Uri $Uri -ContentType "application/json" -Headers headers -Method POST -Body ($buildBody | ConvertTo-Json)
There is a loop that makes a GET call to check the status of that build every few seconds. The task does not end until the build succeeds or an error is thrown.
<code>while($buildOutput.status -ne "completed")
{
Start-Sleep -s 60
$buildOutput = Invoke-RestMethod -Uri $url -Headers headers
$url = $buildOutput.url
Write-Host "Current status of build: $buildOutput.status"
}
</code>
<code>while($buildOutput.status -ne "completed")
{
Start-Sleep -s 60
$buildOutput = Invoke-RestMethod -Uri $url -Headers headers
$url = $buildOutput.url
Write-Host "Current status of build: $buildOutput.status"
}
</code>
while($buildOutput.status -ne "completed")
{
Start-Sleep -s 60
$buildOutput = Invoke-RestMethod -Uri $url -Headers headers
$url = $buildOutput.url
Write-Host "Current status of build: $buildOutput.status"
}
However, the build only kicks off now when the task running this script is cancelled or times out. I have reproduced this several times.
Has anybody had this problem before? Why does the queued build began as soon as I cancel this task? Is there some setting that I am missing?