'Указанное значение не может быть преобразовано в тип ReleaseStartMetadata.'сообщение, отображаемое при запуске API VSTS-релиза с использованием powershell - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь вызвать VSTS release API с использованием powershell, но отображается сообщение об ошибке ниже.Когда я запускаю API в почтальоне, он работает нормально.

Invoke-RestMethod: {"$ id": "1", "innerException": null, "message": "VS402903: VS402903:указанное значение не может быть преобразовано в тип ReleaseStartMetadata. Убедитесь, что оно можно преобразовать в тип ReleaseStartMetadata, и повторите попытку. "," typeName ":" Microsoft.VisualStudio.Services.ReleaseManagement.Data.Exceptions.InvalidRequestException, Microsoft.VisualStudio.Services.Release.Данные "," typeKey ":" InvalidRequestException "," errorCode ": 0," eventId ": 3000} В C: \ Users \ Raj.Negi \ Desktop \ PowerShell \ TriggerVSTSrelease.ps1: 35 char: 11 + $ result = Invoke-RestMethod -Uri $ uri -Metod POST -Body $ params -Hea ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (System.Net.HttpWebRequest: HttpWebRequest) [Invoke-RestMethod], WebException +FullyQualifiedErrorId: WebCmdletWebResponseException, Microsoft.PowerShell.Commands.InvokeRestMethodCommand Невозможно найти идентификатор определения выпуска 860 в C: \ Users \ Raj.Negi \ Desktop \ PowerShell \ TriggerVSTSrelease.ps1: 40 char: 6 + throw "Невозможно найти идентификатор определения выпуска $ ($ definitionId)" + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo:OperationStopped: (невозможно найти ... идентификатор окончания 860: строка) [], RuntimeException + FullyQualifiedErrorId: невозможно найти идентификатор определения выпуска 860

код Powershell:

Param(
   [string]$vstsAccount = "demo",
   [string]$projectName = "Enterprise",
   [string]$definitionId = "860",
   [string]$keepForever = "true",
   [string]$personalAccessToken  = "asdfasdf"
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$headers = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($personalAccessToken)")) }

# Construct the REST URL
$uri = "https://$vstsAccount.vsrm.visualstudio.com/$projectName/_apis/release/releases?api-version=5.0-preview.3"

Write-Host "Uri :" $uri

$params = 
'[
{
    "definitionId": 860,
    "description": "Create Release from postman.",
    "artifacts": [],
    "isDraft": false,
    "reason": "Demo purpose",
    "manualEnvironments": null,
    "environmentsMetadata": null, 
    "properties": null, 
    "variables": null
}
]'

Write-Host " Json Body :" $params

# Invoke the REST call and capture the results
$result = Invoke-RestMethod -Uri $uri -Method POST -Body $params -Headers $headers -ContentType "application/json" -Verbose -Debug

# This call should only provide a single result; Capture the Build ID from the result
if ($result.count -eq 0)
{
     throw "Unable to locate Release Definition Id $($definitionId)"
}
else
{
    Write-host "Success!!!"
}

Запрос почтальона:

{
    "definitionId": 860,
    "description": "Create Release from postman.",
    "artifacts": [],
    "isDraft": false,
    "reason": "Demo purpose",
    "manualEnvironments": null
}

Ответы [ 3 ]

0 голосов
/ 19 февраля 2019

Мне удалось запустить релиз с небольшими изменениями:

1) Начало URL-адреса другое, и предварительный просмотр: 8

$uri = "https://vsrm.dev.azure.com/$vstsAccount/$projectName/_apis/release/releases?api-version=5.0-preview.8"

2) Тело JSON находится вэтот формат:

$params = 
@"
{
    "definitionId": 860,
    "description": "Create Release from PowerShell",
    "artifacts": [],
    "isDraft": false,
    "reason": "Demo purpose",
    "manualEnvironments": null,
    "environmentsMetadata": null, 
    "properties": null, 
    "variables": null
}
"@
0 голосов
/ 29 апреля 2019

Реальным решением является установка параметра Depth командлета ConvertTo-Json, чтобы вы использовали полное представление объекта в JSON.Источник: https://blogs.msdn.microsoft.com/aseemb/2017/04/06/vs402903-the-specified-value-is-not-convertible-to-type-releasedefinition-make-sure-it-is-convertible-to-type-releasedefinition-and-try-again/

0 голосов
/ 18 февраля 2019

Вы заметите, что тело , определенное в документации , совпадает с ReleaseStartMetadata .Попробуйте указать отсутствующие свойства в вашей переменной powershell $params

$params = '[ { "definitionId": 860, "description": "Trigger release from powershell.", "artifacts": [], "isDraft": false, "reason": "Demo purpose", "manualEnvironments": null, "environmentsMetadata": null, "properties": null, "variables": null } ]'

Body

enter image description here

ReleaseStartMetadata

enter image description here

...