【问题标题】:Error while updating VSTS release definition from powershell从 powershell 更新 VSTS 版本定义时出错
【发布时间】:2018-06-29 05:12:24
【问题描述】:

我使用 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;

这里有什么问题?

【问题讨论】:

    标签: azure-devops azure-pipelines-release-pipeline ms-release-management


    【解决方案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 默认情况下只有 2 层深度以形成 JSON 对象,这意味着您在调用 VSTS API 时缺少一些重要属性。解决方法是为 -Depth 参数指定一个较大的值,以便在调用服务时不会错过任何属性。

    例如。 ConvertTo-Json -Depth 100

    有关该问题的更多详细信息以及如何在脚本中修复它可以查看here

    【讨论】:

    • 感谢您分享解决方案,您可以Accept it as an Answer,这对阅读此主题的其他社区成员会有所帮助。
    【解决方案2】:

    除了 divyanshm 的解决方案之外,请确保编码正确:

    $d = [Text.Encoding]::UTF8.GetBytes($d)
    

    【讨论】:

      猜你喜欢
      • 2017-08-26
      • 2023-04-04
      • 2018-11-29
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 2019-01-25
      • 2018-05-03
      • 2017-07-12
      相关资源
      最近更新 更多