如何使用REST API更新Visual Studio Team Services构建定义?

问题描述:

我正尝试使用在https://www.visualstudio.com/en-us/docs/integrate/api/build/definitions和PowerShell脚本中记录的REST API以编程方式更新Team Services构建定义中的变量的值。如何使用REST API更新Visual Studio Team Services构建定义?

因此,计划是使用GET读取定义,修改返回对象中的值,然后使用PUT更新定义。

我的问题是,最后一步(PUT)失败,异常(看起来在服务器端)。即使我不修改定义中的任何内容,也会抛出同样的异常。

所以简单的说PowerShell的代码如下:

$definitionId = 27 
$url = "https://imaginera.visualstudio.com/DefaultCollection/Fidelis/_apis/build/definitions/" + $definitionId + "?api-version=2.0" 

# Read the build definition. 
$definition = Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Get -Uri $url 

# Update the build definition. 
Invoke-RestMethod -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Put -Uri $url -Body (ConvertTo-Json $definition) -ContentType "application/json" 

而且我得到的例外是:

Invoke-RestMethod : {"$id":"1","innerException":null,"message":"Value cannot be null.\r\nParameter name: definition.Options[0].Definition","typeName":"System.ArgumentNullException, mscorlib, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089","typeKey":"ArgumentNullException","errorCode":0,"eventId":0} 

我觉得我现在用的是API的文档中描述,但我可能会错过一些东西。

+0

什么是详细构建日志?如Daniel指出的那样指定-Depth参数,结果如何? –

+0

试图以同样的方式做同样的事情,同样的确切的错误。根据答案,我将'-Depth'设置为3,它工作得很好。 –

指定-Depth参数为ConvertTo-Json

+1

这是问题,谢谢!我没有图像的默认值,它只是2. –

+0

谢谢!花了我几个小时才能过去!早些时候应该搜索过! – KShan

+0

除此之外,我还遇到了一个不同的问题。对于某些定义,我得到了“转换后的JSON字符串格式不正确。”转换为JSON时出错。根据这个(https://*.com/questions/23552000/convertto-json-throws-error-when-using-a-string-terminating-in-backslash#),这是一个PowerShell的错误,可以解决通过添加-Compress选项。 –