使用Azure DevOps Rest API更新变量组单个变量时如何避免其余变量被删除
问题原因
你使用的变量组PUT接口为全量覆盖更新接口,请求体中variables字段的内容会直接替换变量组内的所有现有变量,未在请求中提交的变量会被自动删除,这是接口的设计逻辑,并非异常。
解决方法
目前Azure DevOps没有提供变量组的增量更新(PATCH)接口,要实现单变量更新且保留其余变量,需要按照「先拉取全量配置、本地修改指定变量、再全量提交」的流程操作:
- 第一步:调用GET接口拉取目标变量组的完整配置
执行请求获取变量组所有配置(包含所有现有变量、变量组名称、权限配置等):curl -H "Authorization: Bearer $token" 'https://dev.azure.com/my-org/my-proj/_apis/distributedtask/variablegroups/201?api-version=5.1-preview.1' - 第二步:本地仅修改目标变量的取值
拿到接口返回的完整配置后,只调整你需要更新的my-variable-1的value值,其余所有变量(包括my-variable-2、秘密变量等)的结构和内容完全保留不要改动。
注意:如果变量组包含秘密变量,GET请求返回的对应变量value为null,无需修改此字段,直接保留原有变量结构即可,提交后DevOps会自动保留原有秘密值,不会被覆盖。 - 第三步:将修改后的完整配置作为PUT请求的body提交
此时你的请求body会包含所有原有变量,示例如下:
提交后即可仅更新指定变量,其余变量全部保留。curl -X PUT -H "Authorization: Bearer $token" -H "Content-Type:application/json" 'https://dev.azure.com/my-org/my-proj/_apis/distributedtask/variablegroups/201?api-version=5.1-preview.1' --data '{"variables":{"my-variable-1":{"value":"random1"},"my-variable-2":{"value":"val2"}},"name":"my-var-group"}'
内容的提问来源于stack exchange,提问作者Seeker
相关产品推荐
相关产品推荐

