我正在运行msdeploy(在powershell中,作为脚本的一部分),使用runcommand提供程序作为postsync步骤,它在远程机器上运行批处理文件。批处理文件只执行exit /b 1
,导致它返回一个失败代码。
我使用的是msdeploy v3,并指定了successReturnCodes=0作为提供程序参数。
我可以看到批处理文件正在执行,我可以看到msdeploy认识到这是一个错误,并记录了这个事实:
Performing '-postSync'...
Info: Using ID '892ee111-27c1-458d-888d-ead28fcab742' for connections to the remote server.
Info: Using ID '49ee88fc-0e1d-4eff-8a75-bccf0e7d680a' for connections to the remote server.
Info: Updating runCommand (d:testdeploytesttest.bat).
Info:
Info: C:Windowssystem32>exit /b 1
Error: (13/06/2013 6:06:03 PM) An error occurred when the request was processed on the remote computer.
Error: The process 'C:Windowssystem32cmd.exe' (command line '') exited with code '0x1'.
Error count: 1.
Error during '-postSync'.
Total changes: 1 (0 added, 0 deleted, 1 updated, 0 parameters changed, 6 bytes copied)
D:TestDeploy> $LASTEXITCODE
0
然而,msdeploy返回成功,$LASTEXITCODE为0。
是否有办法告诉msdeploy实际上已经捕获了一个错误?(不需要捕获msdeploy的输出并检查是否存在'Error count:'?:)
似乎如果您删除successReturnsCodes
,它将只报告为警告,但 msdeploy将返回正确的返回代码。
我建议你在MSDeploy论坛上把这个bug归档
原来这是由于msdeploy v2和v3之间的版本混淆。唯一能够正确返回退出代码的组合是v3客户机和v3服务。我正在使用v3客户端,但错误地将其连接到v2服务。
Richard Szalay是正确的,successReturnCodes只是将返回码的日志从warning更改为info。