rest powershell azure-devops

Cómo poner en cola una nueva construcción usando la API REST de VSTS



powershell azure-devops (2)

Tengo el siguiente guion

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)}

Sin embargo me sale este 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,

Así que intenté poner en cola una compilación desde el navegador y ver la carga útil utilizando herramientas de desarrollador:

{"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/"}"}

Entonces, reemplacé eso en mi guión:

$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/"}"} "@

Sin embargo sigo recibiendo el mismo error.

La documentación oficial para este punto final está aquí, pero no está clara https://docs.microsoft.com/en-us/rest/api/vsts/build/builds/queue?view=vsts-rest-4.1#request-body


Esta variante de la respuesta de Marina me funcionó contra un servidor local de TFS 2017:

$b= ''{"buildNumber":<build id>,"definition":{"id":<build id>}}'' $user="DOMAIN/username" $token="<PAT token>" $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("${user}:${token}")) $Uri = "https://tfs.mycompany.local/<team-name>/<project-name>/_apis/build/builds?api-version=4.1" $buildresponse = Invoke-RestMethod -Method Post -UseDefaultCredentials -ContentType application/json -Uri $Uri -Body $b -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} write-host $buildresponse


Para poner en cola una compilación con la API REST , puede usar el siguiente script de powershell:

$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