Azure DevOps:如何使用 REST API 更新发布范围的变量
Azure DevOps: how to update release scoped variables using 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}
重建步骤:
- 从现有发布定义创建发布而不触发 Web 门户上的任何阶段:https://vsrm.dev.azure.com
- 通过调用获取发布详细信息:
GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1-preview.8
- 使用发布范围变量的值更新第 2 步的响应,
"allowOverride"
设置为 true
- 将第 2 步的响应更新为 "modifiedOn" 属性 设置为比现有值晚的日期
- 更新第 2 步的响应,将 "definitionSnapshotRevision" 属性 设置为现有值增加 1
- 通过调用更新版本:
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),这些值会发生变化。看来我还缺少一些东西。我在文档中找不到有关如何正确更新发布部署的任何指导。
我使用 "Invoke-RestMethod" powershell commandlet 来获取发布元数据。我随后更新的此命令行开关 returns 自定义 ps 对象,使用 "ConvertTo-Json" 命令行开关转换为 json 并在 PUT HTTP 请求的正文中提供给 DevOps更新版本。问题是 json 的 Powershell serialization/de-serialization 进程不会导致原始 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
版本已成功更新。
我正在尝试使用 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}
重建步骤:
- 从现有发布定义创建发布而不触发 Web 门户上的任何阶段:https://vsrm.dev.azure.com
- 通过调用获取发布详细信息:
GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1-preview.8
- 使用发布范围变量的值更新第 2 步的响应,
"allowOverride"
设置为 true - 将第 2 步的响应更新为 "modifiedOn" 属性 设置为比现有值晚的日期
- 更新第 2 步的响应,将 "definitionSnapshotRevision" 属性 设置为现有值增加 1
- 通过调用更新版本:
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),这些值会发生变化。看来我还缺少一些东西。我在文档中找不到有关如何正确更新发布部署的任何指导。
我使用 "Invoke-RestMethod" powershell commandlet 来获取发布元数据。我随后更新的此命令行开关 returns 自定义 ps 对象,使用 "ConvertTo-Json" 命令行开关转换为 json 并在 PUT HTTP 请求的正文中提供给 DevOps更新版本。问题是 json 的 Powershell serialization/de-serialization 进程不会导致原始 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
版本已成功更新。