Как опубликовать sh черновик целевой группы через Azure DevOps API - PullRequest
0 голосов
/ 28 апреля 2020

Я нахожусь в процессе преобразования некоторых задач внутри многочисленных групп задач, которые у нас есть, в разные задачи. Вместо того, чтобы делать это вручную, я выбрал использование Powershell вместе с API отдыха Azure DevOps для обновления тел JSON этих групп задач и отправки их в API. Конвертация задач работает отлично, софар.

отправка PUT в остальные API для обновления текущей группы задач из набора работ, но я хочу встроить некоторую историю хранения / историю версий, если некоторые новые задачи в итоге будут работать не так, как ожидалось. Поэтому просто откровенно обновить существующую группу задач под той же основной версией невозможно.

Пользовательский интерфейс Azure DevOps обладает функциональностью, позволяющей сохранять изменения в группе задач как «черновик», а затем публиковать sh этот черновик либо в виде совершенно новой версии (основная версия + 1), либо в качестве предварительного просмотра

Я попытался отправить PUT в 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}

Это объединяет в новой группе задач в черновом состоянии, которое я могу просматривать в пользовательском интерфейсе и изменять и публиковать sh (с предварительным просмотром или без него). Когда я экспортирую созданный JSON из пользовательского интерфейса из созданного вручную черновика и сравниваю его с полученным из powershell, я не вижу различий.


Этот последний шаг - то, где я застрял. Я не могу преобразовать созданный черновик в новую версию группы задач {parentdefintionid}. Я пробовал следующие настройки:

Вызов URI группы задач родительского элемента с положением пут при наличии черновика

JSONObject.version.major = $currentversion + 1
JSONObject.version.isTest = false
JSONObject.preview = true

Removing ParentDefinitionID from JSONObject

приводит к той же ошибке, в которой говорится, что не может найти Идентификатор родительского элемента:

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 draftD

Когда я пытаюсь вызвать URI группы задач draftID со следующими настройками:

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 для экспорта опубликованной группы задач в пользовательском интерфейсе, и они точно совпадают, поэтому я ' Я совершенно уверен, что контент здесь не является проблемой.

В документации MS серьезно не хватает использования API, так что я действительно в неведении и надеюсь найти здесь некоторые подсказки / решения

1 Ответ

0 голосов
/ 29 апреля 2020

Похоже, вы обновляли уже существующую группу задач в Azure DevOps.

Если вы увеличили значение свойства ревизии на 1 выше, чем развернутое в данный момент.

Вы необходимо отправить JSON с тем же свойством ревизии, которое имеет сервер.

...