DevOps Azure: как обновить переменные области выпуска с использованием REST API - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь обновить переменные области выпуска для существующего выпуска с использованием API.

Проблема: получение исключения при вызове API (PUT https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1-preview.8)

Invoke-RestMethod : {"$id":"1","innerException":null,"message":"You are using an old copy of release. Refresh your copy and try
again.","typeName":"Microsoft.VisualStudio.Services.ReleaseManagement.Data.Exceptions.InvalidRequestException,
Microsoft.VisualStudio.Services.ReleaseManagement2.Data","typeKey":"InvalidRequestException","errorCode":0,"eventId":3000}

Шаги для воссоздания:

  1. Создание выпуска из существующего определения выпуска без запуска каких-либо этапов на веб-портале: https://vsrm.dev.azure.com
  2. Получение сведений о выпуске путем вызова: GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1-preview.8
  3. Обновление ответа отшаг 2 со значением для переменной объема выпуска, для которого "allowOverride" установлено в значение true
  4. Обновить ответ из шага 2, установив для свойства "ified-значения "более позднюю дату, чем существующее значение
  5. Обновить ответ из шага 2 с помощьюСвойство «definitionSnapshotRevision» устанавливается на существующее значение, увеличенное на 1
  6. Обновление выпуска путем вызова: PUT https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1-preview.8 и предоставления json, сгенерированного в шагах 2-5
  7. Соблюдайте вышеупомянутое исключение

Я обновил 2 свойства релиза (ifiedOn и DefinitionSnapshotRevision), потому что я видел, что эти значения меняются, если я обновляю релиз с помощью вебsite (https://vsrm.dev.azure.com). Кажется, я все еще что-то упускаю.Я не могу найти никаких руководств в документации о том, как правильно обновить развертывание релиза.

1 Ответ

0 голосов
/ 09 марта 2019

Я использовал командлет PowerShell Invoke-RestMethod, чтобы получить метаданные релиза.Этот командлет возвращает пользовательский объект ps, который я затем обновил, преобразовал в json с помощью командлета «ConvertTo-Json» и предоставил в теле HTTP-запроса PUT к DevOps для обновления выпуска.Проблема заключается в том, что процесс сериализации / десериализации Powershell для json не приводит к исходному json.Например, это свойство json:

"preDeploymentGatesSnapshot": {
    "id": 0,
    "gatesOptions": null,
    "gates": []
},

становится:

"preDeploymentGatesSnapshot": "@{id=0; gatesOptions=; gates=System.Object[]}"

После того, как я использовал правильный json в теле запроса PUT в вызове API:

https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.1-preview.8

релиз успешно обновлен.

...