Ошибка при клонировании определений сборки с использованием REST API - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь клонировать все определения сборки в VSTS, используя метод PowerShell REST API.Тем не менее, я сталкиваюсь с ошибкой ниже.Совместное использование кода и ошибки, которые могут быть полезны.

КОД:

Clear-Host
$buildToCloneName = $buildWeWant
$newBuildName = $buildWeWant-Clone

$user = "xxxxxxx"
$accessToken="xxxxxxxx"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$accessToken)))
$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI = "https://xxxxx.visualstudio.com/"
$env:SYSTEM_TEAMPROJECTID = "xxxxxxx"

"Getting all bulid definitions"
$allSuitesBuildUrl = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$($env:SYSTEM_TEAMPROJECTID)/_apis/build/definitions?api-version=2.0"
$allSuitedBuilds = Invoke-RestMethod -Uri $allSuitesBuildUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}


foreach($buildDetails in $allSuitedBuilds.value){

    $buildWeWant = $buildDetails
    $buildId = $buildWeWant."id"


    [int]$buildIdTest = $null
    if(![int]::TryParse($buildId, [ref]$buildIdTest))
        {
            throw [Exception] "ERROR: NO BUILD ID FOUND"
        }

        "Getting the exact definition for the build"
        # You can see this in the browser using xxxxxxxxxx
        $thisBuildDefUrl = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$($env:SYSTEM_TEAMPROJECTID)/_apis/build/definitions/" + $buildId + "?api-version=2.0"
        $thisBuildDefUrl
        $thisBuildDef = Invoke-RestMethod -Uri $thisBuildDefUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

        ## Create a name for the clone by prefixing "_Clone" to the build name
        "Assigning a new name"
        $thisBuildDef.Name = $buildWeWant."id"."_Clone" 


        "Creating a clone build with name $newBuildName"
        $defAsJson = $thisBuildDef | ConvertTo-Json -Depth 100
        $newBuildDefUrl = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$($env:SYSTEM_TEAMPROJECTID)/_apis/build/definitions?api-version=2.0"
        $newBuildDef = Invoke-RestMethod -Uri $thisBuildDefUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method Post -Body $defAsJson -ContentType "application/json" -ErrorAction Stop


        $newBuildDefAsJson = $newBuildDef | ConvertTo-Json -Depth 100
        $newBuildDefAsJson

        "New Build Created"
        $newBuildDef.Name

}

ОШИБКА:

Invoke-RestMethod: {"$ id": "1", "innerException": null, "message": "Значение не может быть нулевым. \ R \ nПараметр параметра: Definition.Name", "typeName": "System.ArgumentNullException,mscorlib, версия = 14.0.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089 "," typeKey ":" ArgumentNullException "," errorCode ": 0," eventId ": 0} в строке: 42 char: 24 + ... wBuildDef =Invoke-RestMethod -Uri $ thisBuildDefUrl -Headers @ {Author ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (System.Net.HttpWebRequest: HttpWebRequest) [Invoke-RestMethod], WebExceptio n + FullyQualifiedErrorId: WebCmdletException, WebCmdletWebReMicrosoft.PowerShell.Commands.InvokeRestMethodCommand

1 Ответ

0 голосов
/ 03 июля 2019

Вы можете подготовить заголовок отдельно, кроме встроенного определения

Clear-Host
$buildToCloneName = $buildWeWant
$newBuildName = $buildWeWant-Clone

$user = "xxxxxxx"
$accessToken = "xxxxxxxx"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $accessToken)))
$env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI = "https://xxxxx.visualstudio.com/"
$env:SYSTEM_TEAMPROJECTID = "xxxxxxx"

"Getting all bulid definitions"
$allSuitesBuildUrl = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$($env:SYSTEM_TEAMPROJECTID)/_apis/build/definitions?api-version=2.0"
$allSuitedBuilds = Invoke-RestMethod -Uri $allSuitesBuildUrl -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo) }


foreach ($buildDetails in $allSuitedBuilds.value) {

    $buildWeWant = $buildDetails
    $buildId = $buildWeWant."id"


    [int]$buildIdTest = $null
    if (![int]::TryParse($buildId, [ref]$buildIdTest)) {
        throw [Exception] "ERROR: NO BUILD ID FOUND"
    }

    "Getting the exact definition for the build"
    # You can see this in the browser using xxxxxxxxxx
    $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
    $headers.Add("Authorization", "Basic $base64AuthInfo")
    $headers.Add("Content-Type", "application/json")

    $thisBuildDefUrl = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$($env:SYSTEM_TEAMPROJECTID)/_apis/build/definitions/" + $buildId + "?api-version=2.0"
    $thisBuildDefUrl
    $thisBuildDef = Invoke-RestMethod -Uri $thisBuildDefUrl -Headers $headers

    ## Create a name for the clone by prefixing "_Clone" to the build name
    "Assigning a new name"
    $thisBuildDef.Name = $buildWeWant."id"."_Clone"


    "Creating a clone build with name $newBuildName"
    $defAsJson = $thisBuildDef | ConvertTo-Json -Depth 100

    $newBuildDefUrl = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$($env:SYSTEM_TEAMPROJECTID)/_apis/build/definitions?api-version=2.0"
    $newBuildDef = Invoke-RestMethod -Uri $thisBuildDefUrl -Headers $headers -Method Post -Body $defAsJson -ContentType "application/json" -ErrorAction Stop


    $newBuildDefAsJson = $newBuildDef | ConvertTo-Json -Depth 100
    $newBuildDefAsJson

    "New Build Created"
    $newBuildDef.Name

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...