我正在将众多任务组中的某些任务转换为不同的任务。我选择手动使用Powershell和Azure DevOps的Rest API来更新这些任务组的JSON主体并将其发送到API,而不是手工完成。任务的转换工作正常。
将PUT发送到其余API,以便更新集合中的当前任务组,但是如果某些新任务最终工作结果与预期不同,我想构建一些保留/版本历史记录。因此,不能公然地更新相同主要版本下的现有任务组。
Azure DevOps的用户界面具有的功能,您可以将更改以“草稿”的形式保存到任务组中,然后以全新版本(主版本+ 1)或预览的形式发布此草稿。>
我继续尝试将PUT发送到Rest API,并使用以下URI升级主要版本:
PUT https://dev.azure.com/{organization}/{project}/_apis/distributedtask/taskgroups/{taskGroupId}?api-version=5.1-preview.1
附带设置:
JSONObject.version.major = $currentversion + 1 JSONObject.preview = true
这会导致API返回错误消息:
Invoke-WebRequest : {"$id":"1","innerException":null,"message":"Task group {TaskGroupID} not found.","typeName":"Microsoft.TeamFoundation.DistributedTask.WebApi.MetaTaskDefinitionNotFoundException, Microsoft.TeamFoundation.DistributedTask.WebApi","type Key":"MetaTaskDefinitionNotFoundException","errorCode":0,"eventId":3000}
然后我继续尝试查看是否可以创建草稿版本。将POST发送到以下URI时,我可以创建草稿:
POST https://dev.azure.com/{organization}/{project}/_apis/distributedtask/taskgroups?api-version=5.1-preview.1
在JSON中使用以下设置:
JSONObject.version.major = 1 JSONObject.version.istest = true JSONObject.id = $null JSONObject.parentDefinitionId = {TaskGroupID of the taskgroup of which i am trying to make a draft}
[这可以进入处于草稿状态的新任务组,我可以在UI中查看该组并进行修改和发布(带有或不带有预览)。当我从手工制作的草稿中从UI导出创建的JSON并将其与来自powershell的JSON进行比较时,我发现没有区别。
这是我受困的最后一步。我似乎无法将创建的草稿转换为{parentdefintionid}任务组的新版本。我尝试了以下设置:
在草稿可用时用put调用父对象的taskgroupid URI
JSONObject.version.major = $currentversion + 1 JSONObject.version.isTest = false JSONObject.preview = true Removing ParentDefinitionID from JSONObject
导致相同的错误,因为它指出找不到父ID:
Invoke-WebRequest : {"$id":"1","innerException":null,"message":"Task group {TaskGroupID} not found.","typeName":"Microsoft.TeamFoundation.DistributedTask.WebApi.MetaTaskDefinitionNotFoundException, Microsoft.TeamFoundation.DistributedTask.WebApi","type Key":"MetaTaskDefinitionNotFoundException","errorCode":0,"eventId":3000}
上述设置和调用draftID URI时同样有效
当我尝试使用以下设置调用draftID任务组URI时:
JSONObject.version.major = $currentversion + 1 JSONObject.version.isTest = false JSONObject.preview = true JSONObject.id = $ParentDefinitionID Removing ParentDefinitionID from JSONObject
它导致以下错误:
Invoke-WebRequest : {"$id":"1","innerException":null,"message":"The request specifies task group ID {parentTaskGroupID} but the supplied task group has ID {DraftTaskGroupID}.","typeName":"Microsoft.TeamFoundation.DistributedTask.WebApi.Task GroupIdConflictException, Microsoft.TeamFoundation.DistributedTask.WebApi","typeKey":"TaskGroupIdConflictException","errorCode":0,"eventId":3000}
我已经检查了实际的JSONObject并导出到UI中已发布的任务组,并且它们完全匹配,所以我非常肯定内容不是这里的问题。
MS文档严重缺乏API使用,因此我真的很茫然,希望在此处找到一些线索/解决方案
我正在将众多任务组中的某些任务转换为不同的任务。我选择手动使用Powershell以及Azure的Rest API ...
似乎您正在更新Azure DevOps中已经存在的任务组。
如果将修订版属性增加到比当前部署的版本高1。