Создание проблемы JIRA с REST API через PowerShell - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь создать проблему JIRA через Powershell.

Вот мой код.

function ConvertTo-Base64($string) {
$bytes  = [System.Text.Encoding]::UTF8.GetBytes($string);
$encoded = [System.Convert]::ToBase64String($bytes);
return $encoded;
}

function Get-HttpBasicHeader([string]$username, [string]$password, $Headers = @{}) {
    $b64 = ConvertTo-Base64 "$($username):$($Password)"
    $Headers["Authorization"] = "Basic $b64"
    $Headers["X-Atlassian-Token"] = "nocheck"
    return $Headers
}

$restapiuri = "https://baseurl/rest/api/2/issue/"
$headers = Get-HttpBasicHeader "user" "password"

$body = ('
{
    "fields":
    {
        "project":
        {
            "id": "10402"
        },

        "summary": "Test",

        "description": "Test",

        "duedate": "2019-05-11",

        "issuetype":
        {
            "id": "3"
        },

        "reporter":
        {
            "name": "user"
        },

        "priority":
        {
            "id": "10101"
        },

        "customfield_11403": "Test",

        "security":
        {
            "id": "11213"
        },

        "components":
        [
            {           
                "id": "10805"
            }
        ]
    }
}')

Invoke-RestMethod -uri $restapiuri -Headers $headers -Method POST -ContentType "application/json" -Body $body

JSON-часть работает нормально, так как я пробовал использовать Postman ипроблема создана.

Однако в Powershell я всегда получаю 400 неверных запросов.У кого-нибудь есть идеи, почему это может быть?

Спасибо!

РЕДАКТИРОВАТЬ: пример кода в соответствии с ответом

$body = @{

    "fields" = @{

        "project" = @{

            "id" = "10402";
        }

        "summary" = "Test";

        "description" = "Test";

        "duedate" = "2019-05-11";

        "issuetype" = @{

            "id" = "3";
        }

        "reporter" = @{

            "name" = "user";
        }

        "priority" = @{

            "id" = "10101";
        }

        "customfield_11403" = "Test";

        "security" = @{

            "id" = "11213";
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Вот проблема.

$ restapiuri = "https://baseurl/rest/api/2/issue/"

должно быть

$ restapiuri = "https://baseurl/rest/api/2/issue"

После этого изменения оно наконец заработало! Extra / - это то, что PowerShell, похоже, не нравится :)

0 голосов
/ 02 мая 2019

Используйте Invoke-RestMethod для использования REST-API. Сохраните JSON в строку и используйте его в качестве тела, например:

$body = @'
{
    "fields":
    {
        "project":
        {
            "id": "10402"
        },

        "summary": "Test",

        "description": "Test",

        "duedate": "2019-05-11",

        "issuetype":
        {
            "id": "3"
        },

        "reporter":
        {
            "name": "user"
        },

        "priority":
        {
            "id": "10101"
        },

        "customfield_11403": "Test",

        "security":
        {
            "id": "11213"
        },

        "components":
        [
            {           
                "id": "10805"
            }
        ]
    }
}
'@

Invoke-RestMethod -uri $restapiuri -Headers $headers -Method POST -ContentType "application/json" -Body $body
...