Executar um programa em uma máquina remota como parte de integração contínua

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

  •  05-07-2019
  •  | 
  •  

Pergunta

Nós usamos TeamCity, nant e psexec para executar um comando em uma máquina remota como parte da embalagem liberação. Tudo funciona bem quando eu executar o nant a partir do console, mas quando executado a partir de trava TeamCity psexec (congela) 50% das vezes.
Eu olhei através de muitos fóruns e parece haver soluções que aumentam a complexidade da chamada e envolvem perder a saída eo código de erro do comando.
Alguém sabe uma maneira mais fácil para executar um comando em uma máquina remota?
Eu não me importo a criação de algum aplicativo na máquina remota, como um servidor telnet, qualquer conselhos sobre o que fazer?
Graças

Foi útil?

Solução

Eu ter resolvido esta questão com uma combinação de RemCom e uma tarefa MSBuild personalizado chamado ExecParse.

RemCom, porque ele não faz coisas estranhas com STDOUT (pendurado, assim, a compilação). Nós usamos, e ExecParse para capturar a saída da tarefa remoto e analisar o código de saída a partir da saída, porque a tarefa padrão MSBuild Exec não capturar a saída. Alguns NAnt equivalente que captura a saída iria funcionar.

Eu detalhou isso em um post no blog: "Integração contínua: Executar tarefas remotas com TeamCity, MSBuild, RemCom e ExecParse"

Outras dicas

PsExec faz algumas coisas funky com a entrada / saída padrão, e invocando este de Java (que TeamCity é construído sobre) levanta todos os tipos de problemas e questões de estabilidade. psexec -d não funcionou murchar.

Eu resolvi-lo usando Powershell no Team City.

O script abaixo pára um IIS 7 ApplicationPool em um 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

Mais sobre isso no meu blog: http://blog.degree.no/2012/03/executing-commands-and-programs-on-a-remote-machine-using-powershell/

Que tal colocar um (nant) time-out no psexec e repetir a chamada até que nenhum tempo limite acontece?

Eu uso PSExec com a opção -d (não espere que ela termine) e capturar o código de retorno. O código de retorno quando você usou -d é o ID do processo do processo em execução no sistema remoto. então eu uso pslist para consultar o sistema remoto para o ID do processo até que eu não encontrá-lo no sistema remoto por mais tempo.

O que acontece se você configurar agente TeamCity Desenvolver a máquina remota e deixá-lo executar a operação localmente, passando-os binários com "Artefato Dependências"?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top