Запуск программы на удаленном компьютере в рамках непрерывной интеграции

StackOverflow https://stackoverflow.com/questions/1605478

  •  05-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

Другие советы

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/

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top