【问题标题】:How to QUEUE a new build using VSTS REST API如何使用 VSTS REST API 对新构建进行排队
【发布时间】:2018-05-23 08:07:58
【问题描述】:

我有以下脚本

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

但是我得到了这个错误

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,

所以我尝试从浏览器排队构建并使用开发人员工具查看有效负载:

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

所以,我将其替换为我的脚本:

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

但是我一直收到同样的错误。

这个端点的官方文档在这里,但不清楚 https://docs.microsoft.com/en-us/rest/api/vsts/build/builds/queue?view=vsts-rest-4.1#request-body

【问题讨论】:

    标签: rest powershell azure-devops


    【解决方案1】:

    queue a build with REST API,你可以使用下面的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
    

    【讨论】:

    【解决方案2】:

    Marina 答案的这个变体对我来说适用于本地 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 2019-04-10
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多