2017-03-13 101 views
2

我正嘗試使用在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,它工作得很好。 –

回答

4

指定-Depth參數爲ConvertTo-Json

+1

這是問題,謝謝!我沒有圖像的默認值,它只是2. –

+0

謝謝!花了我幾個小時才能過去!早些時候應該搜索過! – KShan

+0

除此之外,我還遇到了一個不同的問題。對於某些定義,我得到了「轉換後的JSON字符串格式不正確。」轉換爲JSON時出錯。根據這個(https://stackoverflow.com/questions/23552000/convertto-json-throws-error-when-using-a-string-terminating-in-backslash#),這是一個PowerShell的錯誤,可以解決通過添加-Compress選項。 –

相關問題