我正在尝试使用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}
重新创建步骤:
GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1-preview.8
"allowOverride"
设置为true的发布范围变量的值更新步骤2的响应PUT https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1-preview.8
并提供在步骤2-5中生成的json 我已经更新了2个发行版属性(modifiedOn和definitionSnapshotRevision),因为我看到如果我使用网站(https://vsrm.dev.azure.com)更新发行版,这些值会改变。看来我仍然缺少一些东西。在文档中找不到有关如何正确更新发行版部署的指导。
答案 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
该版本已成功更新。