使用Azure DevOps Rest API创建发布流水线报错VS402936的问询
问题原因与解决方案
接口认知说明
你对接口的认知没有错误,https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/definitions?api-version=6.0 这个POST接口确实是Azure DevOps官方提供的创建发布流水线的接口。
报错根因
报错的核心原因是你在请求体中手动填写了系统自动生成的标识字段:
- 请求体根级硬编码了
"id": 467,系统会默认将该POST请求判定为对ID为467的已有发布定义进行更新操作,而非创建新定义,查询不到对应ID的定义就返回了这个异常。 - 同时请求体中环境、审批规则、部署闸门等子对象也都硬编码了自定义ID,这些字段同样是系统自动生成,不允许创建时手动指定。
注:构建流水线API对多余的id字段做了兼容处理,所以你之前的创建操作可以成功,但发布流水线API会严格校验传入的id字段,因此触发异常。
修复步骤
你只需要按以下规则清理请求体后重新发起请求即可:
- 删除请求体根级的以下字段:
id、revision、createdBy、createdOn、modifiedBy、modifiedOn、_links、projectReference - 删除每个
environments子对象中的id字段,同时删除preDeployApprovals、postDeployApprovals、preDeploymentGates、postDeploymentGates对象下的id字段 - 额外校验你使用的个人访问令牌(PAT)已开启发布范围的读写权限,URL中的组织名、项目名拼写与实际一致
简化的合法请求体示例
{ "name": "testProject", "source": "restApi", "description": "Built by project_setup.py", "isDeleted": false, "variables": {}, "variableGroups": [], "environments": [ { "name": "dev", "retentionPolicy": { "daysToKeep": 30, "releasesToKeep": 3, "retainBuild": true }, "preDeployApprovals": { "approvals": [ { "rank": 1, "isAutomated": false, "isNotificationOn": false, "approver": { "displayName": null, "id": "aeb95c63-4fac-4948-84ce-711b0a9dda97" } } ] }, // 其余环境配置保留即可,仅需删除所有手动填写的id字段 } ], "artifacts": [], "triggers": [], "releaseNameFormat": null, "tags": [], "properties": {} }
内容的提问来源于stack exchange,提问作者milesb
相关产品推荐
相关产品推荐

