VSTS 任务:Window 机器文件复制:系统错误 53

VSTS Task: Window machine file copy: system error 53

我正在尝试从 VSTS 发布到 VM(运行ning on AWS),即 运行ning IIS。为此,我使用了三个任务。

  1. Windows 机器文件复制
  2. 管理 IIS 应用程序
  3. 部署 IIS 应用程序

在发布之前,我运行正在构建一个构建管道,它为我提供了一个包含网络应用程序的工件 (webapp.zip)。 当我手动将它放在服务器上时,我可以 运行 我发布的第 2 步和第 3 步,并且应用程序可以正常工作。我遇到的问题是 Windows Machine File Copy 无法正常工作。它总是抛出一个异常 'System Error 53: The network path was not found'。当然,这些机器没有加入域,因为我 运行 在 VSTS 上发布我的版本并且需要 AWS VM 上的文件。我尝试打开端口 445(用于文件共享)并确保用户有权访问目标机器上的目标路径。 所以我的问题是:如果两台机器没有连接,我如何才能真正将文件从 VSTS 移动到 AWS VM。

Windows 文件复制旨在在同一网络上工作,在互联网上启用它会打开您的服务器以供黑客入侵。它是为内部网络设计的。 FTP 除非管理得当,否则还会导致重大安全风险。

前进的最简单方法是 运行 您要发布到的 AWS VM 上的代理。然后代理会将工件下载到 AWS VM 和 运行 您需要安装的任何任务。

这允许您在本地计算机上 运行 任务,而不会暴露安全风险。

如果您有多台机器需要在 AWS 中管理,您可以轻松创建一个本地网络,允许您的单个代理使用 Windows 文件复制将文件推送到多个虚拟机而没有风险。

免责声明:此答案仅说明如何满足使用 Windows 机器文件复制任务和 Manage/Deploy IIS 任务的要求。 请时刻关注目标主机的安全,其加固和安全评估是绝对必要的。

如评论中所述,您需要保护部署通道不受外界影响,这里是一个高级示例:


答案: 为了使用 Windows Machine File Copy task 你需要:

  • 在目标机器(运行ning IIS)上启用文件和打印机共享 运行ning 以下命令管理命令提示符:

    netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes
  • 确保在目标机器上安装了 PowerShell 4 或更新版本;从 PS 命令提示符执行的以下命令打印本地计算机上安装的版本:

    PS> $PSVersionTable.PSVersion

    要获取 PowerShell 5,您可以安装 WMF 5 ;

  • 您必须在目标计算机上安装 .NET Framework 4.5 或更新版本;

对于其他两个任务(Manage/Deploy IIS 任务),都需要您在目标计算机上启用 WinRM HTTPS 侦听器。对于开发部署方案,您可以按照以下步骤操作:

  • 从官方 VSTS 任务 GitHub 存储库下载 ConfigureWinRM.ps1 PowerShell 脚本;

  • 从管理 PowerShell 命令提示符启用 RemoteSigned PowerShell 执行策略:

    PS> Set-ExecutionPolicy RemoteSigned
  • 运行 具有以下参数的脚本:

    PS> ConfigureWinRM.ps1 FQDN https

请注意,FQDN 是 VSTS 任务到达的计算机的完整域名,例如myhostname.domain.example。 另请注意,此脚本从 Internet 下载两个可执行文件(makecert.exewinrmconf.cmd),因此此机器必须具有 Internet联系。否则只需下载这两个文件,将它们放在脚本的同级文件中,从脚本中注释掉 Download-Files 调用。

现在您已经使用自签名证书启用了 WinRM HTTPS 侦听器。请记住为这两项任务使用 "Test Certificate" 选项(具有讽刺意味的是,这意味着不测试证书,更好的名称应该是 "Skip CA Check")。

在生产部署场景中,您可能希望使用正确签名的证书。

改用FTP Upload or cURL upload step/task。

关于如何创建FTP站点,可以参考这篇文章:Creating a New FTP Site in IIS 7.