API:尝试设置appveyor项目的名称

时间:2017-09-29 08:01:42

标签: api powershell appveyor

我正在尝试使用PowerShell创建一个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 个答案:

答案 0 :(得分: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