Exécution d'un programme sur une machine distante dans le cadre d'une intégration continue

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

  •  05-07-2019
  •  | 
  •  

Question

Nous utilisons TeamCity, nant et psexec pour exécuter une commande sur une machine distante dans le cadre de l’emballage de la version. Tout fonctionne bien lorsque je lance le nant à partir de la console, mais lors de l'exécution depuis teamcity, psexec se bloque (se bloque) dans 50% des cas.
J'ai parcouru de nombreux forums et il semble y avoir des solutions de rechange qui augmentent la complexité de l'appel et impliquent de perdre la sortie et le code d'erreur de la commande.
Est-ce que quelqu'un connaît un moyen plus facile d'exécuter une commande sur une machine distante?

Cela ne me dérange pas de configurer une application sur la machine distante, comme un serveur Telnet, des conseils sur ce qu'il faut faire?
Merci

Était-ce utile?

La solution

J'ai résolu ce problème en combinant RemCom et une tâche MSBuild personnalisée appelée ExecParse.

RemCom, car il ne fait pas de choses bizarres avec STDOUT (suspendre ainsi la construction). Nous avons utilisé, avec ExecParse, pour capturer la sortie de la tâche distante et analyser le code de sortie de la sortie, car la tâche standard MSBuild Exec ne capture pas la sortie. Un équivalent de NAnt qui capture la sortie fonctionnerait.

Je l'ai détaillé dans un article de blog: " Intégration continue: Exécution de tâches distantes avec TeamCity, MSBuild, RemCom et ExecParse "

Autres conseils

PsExec fait des choses géniales avec les entrées / sorties standard, et son appel depuis Java (sur lequel TeamCity est construit) soulève toutes sortes de problèmes et de problèmes de stabilité. psexec -d ne fonctionnait pas.

Je l'ai résolu en utilisant Powershell dans Team City.

Le script ci-dessous arrête un pool d'applications IIS 7 sur un serveur distant:

[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

Plus d'informations sur mon blog: http://blog.degree.no/2012/03/executing-commands-and-programs-on-a-remote-machine-using-powershell/

Pourquoi ne pas mettre un délai d'attente sur le serveur psexec et répéter l'appel jusqu'à ce qu'il n'y ait plus de délai d'attente?

J'utilise PSExec avec l'option -d (n'attendez pas qu'elle se termine) et capture le code de retour. Le code de retour lorsque vous avez utilisé -d est l'ID de processus du processus en cours d'exécution sur le système distant. J'utilise ensuite PSList pour interroger l'ID de processus sur le système distant jusqu'à ce que je ne le trouve plus sur le système distant.

Que se passe-t-il si vous configurez l'agent de compilation TeamCity sur une machine distante et le laissez effectuer l'opération localement, en lui transmettant les fichiers binaires avec "Dépendances d'artefacts"?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top