Предварительная аутентификация запросов Powershell WebClient к Team City 8.0 REST API

Я пытаюсь запустить сценарии Powershell на этапах сборки Team City.

Сценарии используют WebClient для подключения к REST API Team City; в настоящее время мне нужно войти в Team City и жестко указать имя пользователя и пароль в качестве аргументов на моем этапе сборки Powershell.

Мне интересно, знает ли кто-нибудь способ передать учетные данные, которые я сейчас использую для аутентификации в Team City в моих сценариях Powershell, без жесткого кодирования каких-либо паролей.


person ShaneC    schedule 22.08.2013    source источник
comment
Если не жестко закодировать их, то когда вы хотите предоставить учетные данные для своего сценария powershell?   -  person Mitul    schedule 22.08.2013
comment
Я пытаюсь использовать учетные данные, которые я предоставил для входа в Team City, единственный возможный способ запуска любого из этих сценариев — через веб-интерфейс Team City после того, как имя пользователя и пароль были предоставлены для доступа к серверу.   -  person ShaneC    schedule 22.08.2013


Ответы (2)


Если вам нужен только доступ для чтения в API REST (т.е. вы не хотите выполнять POST/PUT/DELETE, только GET), используйте имя пользователя и пароль, сгенерированные teamcity.

Эта пара имени пользователя и пароля создается для каждой сборки и действительна только во время выполнения сборки. Вот как вы можете получить к ним доступ в своем скрипте powershell:

  • прочитайте переменную среды $env:TEAMCITY_BUILD_PROPERTIES_FILE, которая содержит полный путь к файлу свойств сборки, который сгенерирован/действителен для этой сборки

  • этот файл представляет собой простой файл поддержки java ключ = значение. Вам нужно проанализировать значения свойств teamcity.auth.userId и teamcity.auth.password. Или, что еще лучше, проанализируйте все реквизиты всегда на этапе инициализации вашего скрипта и поместите их в хеш-таблицу в вашем скрипте powershell.

Если вам нужен доступ для записи к API REST, вы не можете использовать эту пару uid/pwd. Для этого я использую связку ключей на OSX и базу данных Keepass на Windows. У Keepass есть хороший .net API, к которому вы можете получить доступ из powershell. Создайте новую базу данных keepass, сделайте ее разблокируемой с помощью ключа, а не пароля, убедитесь, что ваш пользователь, работающий с агентом сборки, имеет доступ к этому ключу и ни у кого другого, затем используйте API-интерфейс keepass, чтобы разблокировать базу данных, прочитайте администратора вашей команды. учетная запись и пароль, которые могут выполнять POST/PUT/DELETE в остальных API.

person iwo    schedule 14.09.2013
comment
Вместо того, чтобы анализировать файл свойств внутри вашего скрипта, вы также можете объявить $username и $password как параметры скрипта powershell и передать их со страницы конфигурации шага сборки в текстовом поле «Аргументы скрипта», например: %system.teamcity.auth.userId% %system.teamcity.auth.password%. Вы также можете передать URL-адрес сервера как %teamcity.serverUrl%. - person Sergio Acosta; 15.01.2014
comment
Это именно то, что я сделал, на момент публикации вопроса я был очень незнаком с Team City и его REST API. Большинство сценариев, которые я запускаю через TC, теперь используют один и тот же метод для автоматической аутентификации, некоторые сборки требуют, чтобы пользователь указал свое собственное имя учетной записи и пароль, как описано здесь: blog.jetbrains.com/teamcity/2013/05/ - person ShaneC; 15.01.2014

Спасибо за ответ, но мы предоставили имя пользователя и пароль в качестве параметров сборки.

Здесь нам помогла встроенная защита паролем TeamCity.

Таким образом, мы используем одну учетную запись для запуска наших сценариев powershell, но мы по-прежнему можем видеть, кто запустил сборку, по учетным данным, которые они использовали для входа в веб-интерфейс.

Таким образом, мы сохранили отслеживаемую ответственность и прекратили постоянный ввод имени пользователя и пароля.

Дополнительная информация: confluence.jetbrains.com/display/TCD7/Typed+Parameters

person ShaneC    schedule 14.10.2013