Запуск программы на удаленном компьютере в рамках непрерывной интеграции - PullRequest
1 голос
/ 22 октября 2009

Мы используем TeamCity, nant и psexec для запуска команды на удаленной машине в составе пакета выпуска. Все работает нормально, когда я запускаю nant из консоли, но при запуске из teamcity psexec зависает (зависает) в 50% случаев.
Я просмотрел много форумов и, кажется, есть обходные пути, которые увеличивают сложность вызова и включают потерю вывода и кода ошибки команды.
Кто-нибудь знает более простой способ выполнить команду на удаленной машине?
Я не против установки какого-либо приложения на удаленной машине, например, сервера telnet, каких-либо советов о том, что делать?
Спасибо

Ответы [ 5 ]

3 голосов
/ 13 ноября 2009

Я решил эту проблему с помощью комбинации RemCom и пользовательской задачи MSBuild под названием ExecParse.

RemCom, потому что он не делает странных вещей с STDOUT (таким образом, вешает сборку). Мы использовали и ExecParse для захвата выходных данных удаленной задачи и анализа кода выхода из выходных данных, поскольку стандартная задача MSBuild Exec не захватывает выходные данные. Некоторый эквивалент NAnt, который захватывает выходные данные, будет работать.

Я подробно рассказал об этом в своем блоге: «Непрерывная интеграция: выполнение удаленных задач с TeamCity, MSBuild, RemCom и ExecParse»

1 голос
/ 30 марта 2012

PsExec делает некоторые забавные вещи со стандартным вводом / выводом, и вызов этого из Java (на котором построен TeamCity) поднимает всевозможные проблемы и проблемы со стабильностью. psexec -d не работал с.

Я решил это с помощью Powershell в Team City.

Сценарий ниже останавливает IIS 7 ApplicationPool на удаленном сервере:

[string]$HostName = "myWebServer"
[string]$Cmd = "C:\Windows\System32\inetsrv\appcmd.exe stop apppool MyMainAppPool” 
Invoke-WmiMethod -class Win32_process -name Create -ArgumentList ($Cmd) -ComputerName $HostName

Подробнее об этом в моем блоге: http://blog.degree.no/2012/03/executing-commands-and-programs-on-a-remote-machine-using-powershell/

1 голос
/ 22 октября 2009

Как насчет установки (nant) тайм-аута на psexec и повторения вызова до тех пор, пока не произойдет тайм-аут?

0 голосов
/ 30 марта 2012

Что произойдет, если вы настроите агент сборки TeamCity на удаленном компьютере и позволите ему выполнять операцию локально, передавая ему двоичные файлы с «зависимостями артефактов»?

0 голосов
/ 20 июня 2010

Я использую PSExec с параметром -d (не дожидаясь его завершения) и фиксирую код возврата. Код возврата при использовании -d - это идентификатор процесса, запущенного в удаленной системе. затем я использую PSList для опроса удаленной системы на предмет идентификатора процесса, пока не найду его в удаленной системе.

...