How to QUEUE a new build using VSTS REST API

12,171

To queue a build with REST API, you can use below powershell script:

$body = '
{ 
        "definition": {
            "id": number
        } 
}
'
$bodyJson=$body | ConvertFrom-Json
Write-Output $bodyJson
$bodyString=$bodyJson | ConvertTo-Json -Depth 100
Write-Output $bodyString
$user="name"
$token="PAT"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

$Uri = "https://account.visualstudio.com/project/_apis/build/builds?api-version=4.1"
$buildresponse = Invoke-RestMethod -Method Post -UseDefaultCredentials -ContentType application/json -Uri $Uri -Body $bodyString -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
write-host $buildresponse
Share:
12,171

Related videos on Youtube

Luis Valencia
Author by

Luis Valencia

Updated on May 25, 2022

Comments

  • Luis Valencia
    Luis Valencia over 1 year

    I have the following script

    Param(
       [string]$vstsAccount = "abc,
       [string]$projectName = "abc",
       [string]$user = "",
       [string]$token = "xyz"
    )
    
    # Base64-encodes the Personal Access Token (PAT) appropriately
    $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))
    
    $verb = "POST"
    
    
    $body = @"
    {
    
        "definition": {
             "id": 20
        }
    }
    "@
    
    
    $uri = "https://$($vstsAccount).visualstudio.com/DefaultCollection/$($projectName)/_apis/build/builds?api-version=4.1"
    $result = Invoke-RestMethod -Uri $uri -Method $verb -ContentType "application/json" -Body (ConvertTo-Json $body)  -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}
    

    However I get this error

    Invoke-RestMethod : {"$id":"1","innerException":null,"message":"This request expects an object in the request body, but the supplied data could not be 
    deserialized.","typeName":"Microsoft.TeamFoundation.Build.WebApi.RequestContentException,
    

    So I tried to queue a build from the browser and see the payload using developer tools:

    {"queue":{"id":70},"definition":{"id":20},"project":{"id":"b0e8476e-660a-4254-a100-92ef0ec255e5"},"sourceBranch":"refs/heads/master","sourceVersion":"","reason":1,"demands":[],"parameters":"{\"system.debug\":\"false\"}"}
    

    So, I replaced that into my script:

    $body = @"
    {"queue":{"id":70},"definition":{"id":20},"project":{"id":"b0e8476e-660a-4254-a100-92ef0ec255e5"},"sourceBranch":"refs/heads/master","sourceVersion":"","reason":1,"demands":[],"parameters":"{\"system.debug\":\"false\"}"}
    "@
    

    However I keep getting the same error.

    The official documentation for this endpoint is here, but its not clear https://docs.microsoft.com/en-us/rest/api/vsts/build/builds/queue?view=vsts-rest-4.1#request-body