我正在尝试为部署和备份做一些 MSBuild 自动化。我尝试了几种不同的远程执行平台(Powershell/WMI、PsExec 和 Cygwin),但都遇到了一些问题。
对于 Powershell 和 PsExec,我认为问题在于机器上使用的一些安全基线。我没有完全控制机器和域。
我发现最稳定的场景是 cygwin/openssh。但是当我在 MSBuild 中运行 plink 并尝试远程调用 MSBuild 时,msbuild 挂起而没有告诉我错误。如果我直接从提示符运行 plink,一切正常。
MSBuild 脚本如下:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Plink>"c:\Program Files (x86)\PuTTY\plink.exe"</Plink>
<UserName></UserName>
<Password></Password>
<HostName>localhost</HostName>
<RemoteCommand2>/cygdrive/c/SandBox/remotemsbuild/echoalotoffiles.bat</RemoteCommand2>
</PropertyGroup>
<Target Name="Build">
<Exec Command="$(Plink) -l $(UserName) -pw $(Password) -batch $(HostName) $(RemoteCommand2)" />
</Target>
<Target Name="EchoALotOfFiles">
<ItemGroup>
<SandBoxFiles Include="$(MSBuildProjectDirectory)\..\**\*.*" />
</ItemGroup>
<Message Text="@(SandBoxFiles)" />
</Target>
</Project>
当我运行第一个目标 Build 时,我遇到了问题(MSBuild 挂起)
Microsoft (R) Build Engine version 4.0.30319.17929
[Microsoft .NET Framework, version 4.0.30319.17929]
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 02/11/2013 12:01:45.
Project "C:\SandBox\remotemsbuild\remotemsbuild.build" on node 1 (EchoALotOfF
iles target(s)).
EchoALotOfFiles:
如果我只从命令行运行 plink,一切正常。
有什么猜测吗?