我使用VSTS API文档here中列出的API。在修改变量并保存定义时,我从服务器收到的错误是VS402982: Retention policy is not set for the environment 'environmentName'
。
PS脚本中执行更新的部分是-
$c = Invoke-WebRequest 'https://accountname.vsrm.visualstudio.com/projectname/_apis/release/definitions/definitionId' -Method Get -Headers @{Authorization = 'Bearer ' + $authtoken}
$jsonObj = $c | ConvertFrom-Json
$url3 = "https://accountname.vsrm.visualstudio.com/projectname/_apis/release/definitions/definitionId?api-version=4.1-preview.3";
$contentType3 = "application/json"
$headers3 = @{
Authorization = 'Bearer ' + $authtoken
};
$d = $jsonObj | ConvertTo-Json;
Invoke-RestMethod -Method PUT -Uri $url3 -ContentType $contentType3 -Headers $headers3 -Body $d;
这有什么问题吗?
答案 0 :(得分:1)
这个问题已经以不同的形式被报道过两次,并且主要与问题中的powershell代码有关。
如果您看到类似问题或本问题中提到的错误-VS402903: The specified value is not convertible to type ReleaseDefinition. Make sure it is convertible to type ReleaseDefinition and try again
,则表示您要发布到服务器的JSON对象存在问题。最简单的问题是捕获请求有效负载并分析问题。
但是,在问题中提到的代码中,问题出在Powershell的ConvertTo-JSON方法。请注意,发布定义具有多层嵌套对象,定义->环境->步骤/批准等,并且默认情况下 ConvertTo-JSON仅深入两个级别以形成JSON对象您在调用VSTS API时缺少了一些重要属性。解决方法是为 -Depth 参数指定一个较大的值,以使调用服务时不会丢失任何属性。
例如 ConvertTo-Json-深度100
有关该问题及其在脚本中的解决方式的更多详细信息,请参见here。
答案 1 :(得分:0)
除 divyanshm 的解决方案外,请确保编码正确:
$d = [Text.Encoding]::UTF8.GetBytes($d)