【问题标题】:How to publish a draft Task Group via Azure DevOps API如何通过 Azure DevOps API 发布任务组草案
【发布时间】:2020-04-28 15:32:52
【问题描述】:

我正在将我们必须执行的众多任务组中的一些任务转换为不同的任务。我没有手动执行此操作,而是选择使用 Powershell 和 Azure DevOps 的 Rest API 来更新这些任务组的 JSON 主体并将它们发送到 API。到目前为止,任务的转换工作正常。

向其余 API 发送 PUT 以更新当前任务组,但如果某些新任务最终的工作方式与预期不同,我想建立一些保留/版本历史记录。因此,公然将现有的任务组更新到相同的主要版本下是不可行的。

Azure DevOps 的 UI 具有功能,您可以将更改保存到任务组作为“草稿”,然后将此草稿作为全新版本(主要版本 + 1)或预览版发布

我继续尝试向 Rest API 发送 PUT 并使用以下 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}

然后我继续尝试查看是否可以创建草稿版本。向以下 URI 发送 POST 时,我能够创建草稿:

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-devops azure-devops-rest-api


    【解决方案1】:

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

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

    您需要提交与服务器具有相同修订属性的 JSON。

    【讨论】:

    • 道歉。由于其他更紧迫的问题,这个项目被搁置了。但是,我使用与服务器相同的修订版以及修订版 + 1 尝试了这两个建议,并且都消除了与上述相同的错误。我已经尝试过草稿 ID 和父 ID。您还有其他建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2020-11-25
    • 2019-04-02
    • 2021-06-21
    • 1970-01-01
    相关资源
    最近更新 更多