Esecuzione di un programma su una macchina remota come parte della continua integrazione

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

  •  05-07-2019
  •  | 
  •  

Domanda

Usiamo TeamCity, nant e psexec per eseguire un comando su una macchina remota come parte della confezione di rilascio. Tutto funziona bene quando eseguo il nant dalla console ma quando corro da teamcity psexec si blocca (si blocca) il 50% delle volte.
Ho esaminato molti forum e sembrano esserci soluzioni alternative che aumentano la complessità della chiamata e comportano la perdita dell'output e del codice di errore del comando.
Qualcuno conosce un modo più semplice per eseguire un comando su una macchina remota?
Non mi dispiace impostare qualche applicazione sul computer remoto, come un server Telnet, qualche consiglio su cosa fare?
Grazie

È stato utile?

Soluzione

Ho risolto questo problema con una combinazione di RemCom e un'attività personalizzata di MSBuild chiamata ExecParse.

RemCom, perché non fa cose strane con STDOUT (appendendo così la build). Abbiamo utilizzato ed ExecParse per acquisire l'output dell'attività remota e analizzare il codice di uscita dall'output, poiché l'attività standard di MSBuild Exec non acquisisce l'output. Qualche equivalente NAnt che cattura l'output funzionerebbe.

L'ho dettagliato in un post sul blog: " Integrazione continua: esecuzione di attività remote con TeamCity, MSBuild, RemCom ed ExecParse "

Altri suggerimenti

PsExec fa alcune cose funky con l'input / output standard, e invocarlo da Java (su cui TeamCity è basato) solleva tutti i tipi di problemi e problemi di stabilità. psexec -d non ha funzionato appassire.

L'ho risolto usando Powershell in Team City.

Lo script seguente arresta un ApplicationPool IIS 7 su un server 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

Maggiori informazioni sul mio blog: http://blog.degree.no/2012/03/executing-commands-and-programs-on-a-remote-machine-using-powershell/

Che ne dici di mettere un timeout (nant) sul psexec e ripetere la chiamata fino a quando non si verifica alcun timeout?

Uso PSExec con l'opzione -d (non aspettare che finisca) e acquisisco il codice di ritorno. Il codice di ritorno quando hai usato -d è l'ID del processo in esecuzione sul sistema remoto. quindi uso PSList per eseguire il polling del sistema remoto per l'ID processo fino a quando non lo trovo più sul sistema remoto.

Cosa succede se si imposta l'agente di compilazione di TeamCity su una macchina remota e si lascia che esegua l'operazione localmente, passandogli i file binari con "Dipendenze artefatto"?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top