2017-09-29 41 views
0

我想用powershell创建一个appveyor项目并设置我自己的名字。API:试图设置appveyor项目的名称

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步的作品,创建项目,但是当我试图改变名称,我得到一个异常

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 

当我尝试在步骤1中创建期间设置的名称,然后名称未使用,项目名称与未设置名称相同。

回答

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