2015-07-08 2 views
0

Когда я запускаю сборку на TeamCity, я хочу пометить сборку переменной окружения. Я надеялся, что это может быть просто, но кажется, что нет встроенного способа сделать это. Я нашел link, который использует TeamCity REST Api для добавления тега, но он использует curl, а мой сервер сборки - Windows. Итак, я подумал, что PowerShell, возможно, это сделает.TeamCity REST Api возвращает 403 с использованием системных учетных данных

Использование Invoke-WebRequest Я придумал следующий сценарий, где параметры сборки Teamcity подставляются автоматически:

$username = "%system.teamcity.auth.userId%" 
$password = "%system.teamcity.auth.password%" | ConvertTo-SecureString -asPlainText -Force 
$cred = New-Object System.Management.Automation.PSCredential($username,$password) 

Invoke-WebRequest ` 
    -Uri "%teamcity.serverUrl%/httpAuth/app/rest/builds/%teamcity.build.id%/tags" ` 
    -Credential $cred ` 
    -Method POST ` 
    -ContentType "application/xml" ` 
    -Body '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><tags><tag>%env.Environment%</tag></tags>' ` 
    -UseBasicParsing 

The TeamCity documentation заявляет, что свойства системы могут быть использованы в качестве учетных данных:

Если вы выполняете запрос из сборки TeamCity, рассмотрите возможность использования teamcity.auth.userId/teamcity.auth.password системных свойств как учетных данных (в настройках TeamCity вы можете ссылаться ать их как % system.teamcity.auth.userId% и% system.teamcity.auth.password%)

Однако, когда я бегу выше, как на этапе сборки сценарий Powershell, я получаю 403 запрещено:

> [16:48:35][Step 1/1] Invoke-WebRequest : The remote server returned an 
> error: (403) Forbidden. [16:48:35][Step 1/1] At line:1 char:1 
> [16:48:35][Step 1/1] + Invoke-WebRequest ` [16:48:35][Step 1/1] + 
> ~~~~~~~~~~~~~~~~~~~ [16:48:35][Step 1/1]  + CategoryInfo   : 
> InvalidOperation: (System.Net.HttpWebRequest:Htt [16:48:35][Step 1/1] 
> pWebRequest) [Invoke-WebRequest], WebException [16:48:35][Step 1/1] 
> + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShe [16:48:35][Step 1/1] 
> ll.Commands.InvokeWebRequestCommand [16:48:35][Step 1/1] 
> [16:48:35][Step 1/1] Process exited with code 1 [16:48:35][Step 1/1] 
> Step Powershell failed 

Должен ли я включить что-то в TeamCity, чтобы этот пользователь мог отправлять URL-адрес?

ответ

2

%system.teamcity.auth.userId% + %system.teamcity.auth.password% в настоящее время делает не работает: https://youtrack.jetbrains.com/issue/TW-39206

Указать учетные данные явно. Если вы хотите скрыть пароль, вы можете создать параметр конфигурации со спецификацией password display='hidden'. В этом случае значение paraemter не будет доступно для чтения, только для записи. Также параметр thi будет замаскирован в журналах

+0

Достаточно честно, я буду следить за этим. благодаря – AlexFoxGill

0

У меня есть образцы, где я отправляю учетные данные в заголовке.

$ ApiCredentials = New-Object System.Management.Automation.PSCredential ($ ApiUsername (ConvertTo-SecureString $ ApiPassword -AsPlainText -Force))

$ApiCredentials_ForHeader = $ApiUsername + ":" + $ApiPassword 
$ApiCredentialsBase64 = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($ApiCredentials_ForHeader)) 

$ApiCredentialsHeader = @{}; 
$ApiCredentialsHeader.Add("Authorization", "Basic $ApiCredentialsBase64") 

Invoke-RestMethod -Headers $ApiCredentialsHeader -Credential $ApiCredentials -Uri $Url -Method Post -ContentType $Type -Body $Data -TimeoutSec 30 -DisableKeepAlive; 

Надеется, что это помогает

+0

Учетные данные принимаются, когда я использую свою личную учетную запись и пароль - проблема, которую я пытаюсь решить, заключается в том, что '% system.teamcity.auth.userId%' и '% system. teamcity.auth.password% 'похоже, не имеют доступа к сервису (следовательно, 403 Forbidden error) – AlexFoxGill

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