【发布时间】:2017-04-13 14:42:58
【问题描述】:
我正在从我们的构建服务器调用远程 PowerShell 脚本。问题是当远程脚本运行时间超过一分钟时,MSDeploy 将在完成后挂起。
MSDeploy 的输出如下所示:
信息:睡一分钟... 信息:睡完了! 信息:进程“C:\Windows\system32\cmd.exe”(命令行“”)退出,代码为“0x0”。远程进程明显结束,但如果运行时间超过一分钟,MSDeploy 将无法识别它。我们正在运行的 MSDeploy 命令如下所示:
"C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -source:runCommand="powershell.exe -File D:\test\command.ps1 < NUL",waitInterval=2147483647,successReturnCodes=0;2 -dest:auto,ComputerName='https://someurl.com',AuthType=Basic,UserName='someusername',Password='somepassword' -allowUntrusted -useCheckSum -Verbose -Debug
请注意我是如何将NUL 中的管道包含到流程中的。这是为了重定向远程powershell进程的STDIN,因为当STDIN被重定向时,它显然可以远程挂起。必须手动关闭。
我在 stackoverflow 上看到了许多帖子,表明这将解决问题。我还能够让< NUL 修复程序在另一个环境中工作。
我也看到了帖子,而不是建议设置标志 -InputFormant None,但这也不起作用。
假设我有 2 台服务器 - Build Server A 和 Remote Server A。无论我应用什么修复程序,Build Server A 上的 MSDeploy 都会挂起,即使 Remote Server A 完成运行其 Powershell 脚本并宣布其返回码。
假设我还有 2 台服务器 - Build Server B 和 Remote Server B。我应用的修复做在这些服务器上工作,MSDeploy 没有挂起。
两个环境(A 和 B)都使用 Powershell 2.0 和 MSDeploy 版本 7.1.1955.0。
我注意到输出有一个区别:当使用 -Verbose 和 -Debug 标志运行这两个进程时,构建服务器 A 会出现:
信息:进程“C:\Windows\system32\cmd.exe”(命令行“”)退出,代码为“0x0”。
Build Server B 吐出来:
信息:进程“C:\Windows\system32\cmd.exe”(命令行“”)退出,代码为“0x0”。
详细:同步在 1 遍中完成。
构建服务器 B(未挂起)在其详细输出中提到它已成功同步。构建服务器 A 没有。
很遗憾,我们无法及时升级 PowerShell 或 MSDeploy。有人有什么见解吗?
【问题讨论】:
-
由于您的构建和服务器配置,您的问题对您来说非常具体,我认为其他任何人都无法重现该错误,因为我们无法访问您的特定环境。 Minimal, Complete, and Verifiable example 会有所帮助,但我认为在这种情况下是不可能的。
-
我已尽我所能找到环境中的差异。它们看起来一样。 Windows 2008、powershell 2.0 和 msdeploy 版本 7.1.1955.0
-
除此之外,我没有任何事情可做。我们已经坚持了好几个星期了。我想不出任何可能导致此问题的服务器配置或环境差异。
标签: powershell msdeploy