如何通过Azure DevOps API发布任务组草稿

问题描述 投票:0回答:1

我正在将众多任务组中的某些任务转换为不同的任务。我选择手动使用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 ...

powershell azure-devops azure-devops-rest-api
1个回答
0
投票

似乎您正在更新Azure DevOps中已经存在的任务组。

如果将修订版属性增加到比当前部署的版本高1。

© www.soinside.com 2019 - 2024. All rights reserved.