我们使用TeamCity,nant和psexec作为发布包装的一部分在远程计算机上运行命令。当我从控制台运行nant时,一切正常,但是从teamcity运行psexec时会挂起(冻结)50%的时间。
我查看了很多论坛,似乎有一些变通方法会增加调用的复杂性,并且会导致输出和命令的错误代码丢失。
有没有人知道在远程机器上运行命令的更简单方法?
我不介意在远程机器上设置一些应用程序,比如telnet服务器,有关如何做的任何建议?
感谢

有帮助吗?

解决方案

我已经通过RemCom和一个名为ExecParse的自定义MSBuild任务的组合解决了这个问题。

RemCom,因为它不会对STDOUT做出奇怪的事情(因此挂起了构建版本)。我们使用和ExecParse来捕获远程任务的输出,并从输出中解析Exit Code,因为标准的MSBuild Exec任务不捕获输出。捕获输出的一些NAnt等效物将起作用。

我在博客文章中对此进行了详细介绍:”持续集成:使用TeamCity,MSBuild,RemCom和ExecParse执行远程任务“

其他提示

PsExec使用标准输入/输出做了一些时髦的事情,从Java(TeamCity构建的)调用它会引发各种问题和稳定性问题。 psexec -d没有工作枯萎。

我在Team City中使用Powershell解决了这个问题。

下面的脚本会停止远程服务器上的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/

如何在psexec上暂停(nant)超时并重复通话直到没有超时?

我使用带有-d选项的PSExec(不要等待它完成)并捕获返回码。使用-d时的返回码是远程系统上运行的进程的进程ID。然后我使用PSList轮询远程系统的进程ID,直到我再也找不到远程系统。

如果您在远程计算机上设置TeamCity构建代理并让它在本地执行操作,并将带有“Artifact Dependencies”的二进制文件传递给它,会发生什么?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top