Azure DevOps:如何使用REST API更新发布范围的变量

时间:2019-02-18 21:21:26

标签: azure-devops azure-pipelines-release-pipeline azure-devops-rest-api

我正在尝试使用API​​为现有发行版更新发行版范围变量。

问题:在API调用上收到异常(PUT https://vsrm.dev.azure.com/ {organization} / {project} / _ apis / release / releases / {releaseId}?api-version = 5.1-preview.8)

Invoke-RestMethod : {"$id":"1","innerException":null,"message":"You are using an old copy of release. Refresh your copy and try
again.","typeName":"Microsoft.VisualStudio.Services.ReleaseManagement.Data.Exceptions.InvalidRequestException,
Microsoft.VisualStudio.Services.ReleaseManagement2.Data","typeKey":"InvalidRequestException","errorCode":0,"eventId":3000}

重新创建步骤:

  1. 根据现有版本定义创建版本,而无需在Web门户上触发任何阶段:https://vsrm.dev.azure.com
  2. 通过调用获取发布详细信息:     GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1-preview.8
  3. 使用"allowOverride"设置为true的发布范围变量的值更新步骤2的响应
  4. 使用“ modifiedOn”属性将步骤2更新为比现有值晚的日期
  5. 使用“ definitionSnapshotRevision”属性将步骤2中的响应更新为设置为1的现有值
  6. 通过调用更新版本:     PUT https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1-preview.8     并提供在步骤2-5中生成的json
  7. 遵守上述例外情况

我已经更新了2个发行版属性(modifiedOn和definitionSnapshotRevision),因为我看到如果我使用网站(https://vsrm.dev.azure.com)更新发行版,这些值会改变。看来我仍然缺少一些东西。在文档中找不到有关如何正确更新发行版部署的指导。

1 个答案:

答案 0 :(得分:0)

我使用了“ Invoke-RestMethod” powershell小命令来获取发布元数据。此Commandlet返回我自定义的ps对象,然后我对其进行了更新,使用“ ConvertTo-Json” commandlet将其转换为json,并在PUT HTTP请求的正文中提供给DevOps以更新发行版。问题是json的Powershell序列化/反序列化过程不会导致原始json。 例如,以下json属性:

"preDeploymentGatesSnapshot": {
    "id": 0,
    "gatesOptions": null,
    "gates": []
},

成为:

"preDeploymentGatesSnapshot": "@{id=0; gatesOptions=; gates=System.Object[]}"

在API调用中,在PUT请求的正文中使用了正确的json之后:

  

https://vsrm.dev.azure.com/ {organization} / {project} / _ apis / release / releases / {releaseId}?api-version = 5.1-preview.8

该版本已成功更新。