2017-09-29 2 views
0

powershell을 사용하여 컨베이어 프로젝트를 만들고 내 이름을 설정하려고합니다.API : 컨베이어 프로젝트의 이름을 설정하려고합니다.

function Invoke-AppveyorCreateProject { 
    param (
     [System.String] $appveyorProjectName, 
     [System.String] $repositoryName 
    ) 

    # step 1, create project 
    $project = @{ 
     repositoryProvider="gitHub" 
     repositoryName="esskar/$repositoryName" 
     isPrivate=$true 
    } 
    $json = $project | ConvertTo-Json 
    $project = Invoke-RestMethod -Method Post -Uri "$AppveyorApiUrl/projects" -Headers $AppveyorRestHeaders -Body $json -ContentType "application/json" 

    # step 2, update project 
    $project.name = $appveyorProjectName 
    $json = $project | ConvertTo-Json 
    $project = Invoke-RestMethod -Method Put -Uri "$AppveyorApiUrl/projects" -Headers $AppveyorRestHeaders -Body $json -ContentType "application/json" 
} 

# Globals 
$AppveyorApiUrl = 'https://ci.appveyor.com/api' 
$AppveyorApiToken = $env:AppveyorApiToken 
$AppveyorRestHeaders = @{ 
    "Authorization" = "Bearer $AppveyorApiToken" 
    "Content-type" = "application/json" 
} 
$AppveyorAccountName = $env:AppveyorAccountName 

Invoke-AppveyorCreateProject "foo.bar" "repo1" 

1 단계 작업은 프로젝트가 생성됩니다,하지만 난 이름을 변경하려고 할 때 1 단계에서 작성하는 동안 이름을 설정하려고하면, 나는 다음, 예외

Invoke-RestMethod : {"message":"Object reference not set to an instance of an object."} 
At appveyortest.ps1:20 char:16 
+ ... $project = Invoke-RestMethod -Method Put -Uri "$AppveyorApiUrl/proje ... 
+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebExc 
    eption 
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand 

를 얻을 수 name은 사용되지 않으며 프로젝트는 이름을 설정하지 않은 것과 같은 이름을가집니다.

답변

1

는 2 단계에 대해 다음 코드를 사용

$settings = Invoke-RestMethod -Uri "$AppveyorApiUrl/projects/$($project.accountName)/$($project.slug)/settings" -Headers $AppveyorRestHeaders -Method Get 
$settings.settings.name = $appveyorProjectName 
Invoke-RestMethod -Uri "$AppveyorApiUrl/projects" -Headers $AppveyorRestHeaders -Body ($settings.settings | ConvertTo-Json -Depth 10) -Method Put 
+0

좋은, 그것은 노력하고 있습니다. 왜 내가 API 문서에서 그것을 얻지 못했는지 모르겠다. – esskar