2016-07-11 4 views
2

Я пытаюсь очереди новой сборки из PowerShell с помощью API TFS Rest. Я могу поставить в очередь новую сборку, но я бы хотел установить свойство requestBy. В docs можно прочитать, что вы можете передать дополнительные параметры. Я не могу найти никакой дополнительной документации о том, какими могут быть эти параметры. Кто-нибудь знает, можно ли это сделать?TFS сборка vNext REST API: очереди сборки Запрошенной

Использование tfsbuild.exe (в очереди XAML сборки) можно передать дополнительный аргумент, как это:

&$tfsBuild.Exe start "url" project definition /requestedFor:"$buildRequestedFor" /queue 

Редактировать

Я смог получить эту работу. Тело запроса выглядит так:

$json = "{ 
     ""definition"": { 
      ""id"" : 174 
     } 
     ,""requestedFor"": { 
      ""id"": ""6f4d7323-fa51-4cda-9eb4-7342b02ba087"" 
     } 
     }" ` 

Вы можете использовать только идентификатор. Например, использование uniqueName завершится ошибкой.

Вот полный PowerShell код:

$user = "" 
$pass= "" 

$uri = "http://Instance/DefaultCollection/Project/_apis/build/builds?api-version=2.0" 

$json = "{ 
     ""definition"": { 
      ""id"" : 174 
     } 
     ,""requestedFor"": { 
      ""id"": ""6f4d7323-fa51-4cda-9eb4-7342b02ba087"" 
     } 
     }" 

$secpasswd = ConvertTo-SecureString $pass -AsPlainText -Force 
$cred = New-Object System.Management.Automation.PSCredential ($user, $secpasswd) 

Invoke-RestMethod -Uri $uri -Method Post -Credential $cred -ContentType "application/json" -Body $json 
+0

Связанный (для vNext): http://stackoverflow.com/questions/32326058/tfsbuild-command-line-vnext-2015 – CJBS

+0

Кажется, это решение для powershell: http://stackoverflow.com/questions/32496022/start-vnext-build-from-powershell-and-get-artefacts – CJBS

+0

Я не понимаю, почему эти две ссылки помогают. Я могу запустить новую сборку, это не проблема. Я не могу установить свойство requestBy. –

ответ

0

Я получил эту работу. Тело запроса выглядит так:

$json = "{ 
     ""definition"": { 
      ""id"" : 174 
     } 
     ,""requestedFor"": { 
      ""id"": ""6f4d7323-fa51-4cda-9eb4-7342b02ba087"" 
     } 
     }" 

Вы можете использовать только идентификатор. Например, использование uniqueName завершится ошибкой.

1

Вы должны быть в состоянии использовать PowerShell очереди сборки с Invoke-RestMethod командлета. Это может помочь link. Проблема в том, что API REST не похож на полностью документированный, поэтому есть некоторые свойства, которые можно найти только с помощью инструмента, такого как Fiddler. Вы могли бы изменить тело, чтобы быть чем-то вроде этого, но я еще не пробовал.

$body = @" 
     { 
      "definition": { 
       "id": $Build_Definition_ID 
      }, 
      "sourceVersion": { 
       "requestedBy": {name here} 
      } 
     } 
    "@ 

Вот пример того, что вы должны быть в состоянии изменить (отсутствующую декларацию нескольких переменных, но это должно вам начать работу):

$body = @" 
    { 
     "definition": { 
      "id": $Build_Definition_ID 
     } 
    } 
"@ 

$baseUri = $TFSInstanceURL+"/"+$ProjectCollection+"/"+$TeamProject+"/_apis/build" 

$postUri = $baseUri+"/builds?api-version=2.0" 

Write-Host $postUri 

##Create a new PSCredential based on username/password 

$securePassword = $Password | ConvertTo-SecureString -AsPlainText -Force 
$credential = New-Object System.Management.Automation.PSCredential($User, $securePassword) 

### Queue a build ### 

##Call the REST API for TFS that does a POST request to queue a build with the body of the request to be the build definition 

$buildResponse = Invoke-RestMethod -Method Post -Credential $credential -ContentType application/json -Uri $postUri -Body $body 

Write-Host (ConvertTo-Json $buildResponse) 

Смотрите эту link больше примеров.

Смежные вопросы