Ejecutar un programa en una máquina remota como parte de la integración continua

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

  •  05-07-2019
  •  | 
  •  

Pregunta

Utilizamos TeamCity, nant y psexec para ejecutar un comando en una máquina remota como parte del paquete de lanzamiento. Todo funciona bien cuando ejecuto el nant desde la consola, pero cuando ejecuto desde teamcity psexec se cuelga (se congela) el 50% de las veces.
Miré a través de muchos foros y parece que hay soluciones que aumentan la complejidad de la llamada e implican perder la salida y el código de error del comando.
¿Alguien sabe una manera más fácil de ejecutar un comando en una máquina remota?
No me importa configurar alguna aplicación en la máquina remota, como un servidor telnet, ¿algún consejo sobre qué hacer?
Gracias

¿Fue útil?

Solución

Resolví este problema con una combinación de RemCom y una tarea personalizada de MSBuild llamada ExecParse.

RemCom, porque no hace cosas extrañas con STDOUT (por lo tanto, cuelga la compilación). Utilizamos, y ExecParse para capturar la salida de la tarea remota, y analizar el código de salida de la salida, porque la tarea estándar de MSBuild Exec no captura la salida. Algún equivalente de NAnt que capture la salida funcionaría.

He detallado esto en una publicación del blog: " Integración continua: Ejecución de tareas remotas con TeamCity, MSBuild, RemCom y ExecParse "

Otros consejos

PsExec hace algunas cosas extravagantes con la entrada / salida estándar, e invocar esto desde Java (en el que se basa TeamCity) plantea todo tipo de problemas y problemas de estabilidad. psexec -d no funcionó marchitador.

Lo resolví usando Powershell en Team City.

La siguiente secuencia de comandos detiene un ApplicationPool de IIS 7 en un servidor remoto:

[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

Más información al respecto en mi blog: http://blog.degree.no/2012/03/executing-commands-and-programs-on-a-remote-machine-using-powershell/

¿Qué hay de poner un tiempo de espera (nant) en el psexec y repetir la llamada hasta que no se agote el tiempo de espera?

Utilizo PSExec con la opción -d (no espere a que termine) y capturo el código de retorno. El código de retorno cuando usó -d es el ID de proceso del proceso que se ejecuta en el sistema remoto. luego utilizo PSList para sondear el sistema remoto para el ID de proceso hasta que ya no lo encuentre en el sistema remoto.

¿Qué sucede si configura el Agente de compilación de TeamCity en una máquina remota y le permite que realice la operación localmente, pasándole los binarios con " Dependencias de artefactos " ;?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top