Windows 计算机文件复制 - DevOps 任务和 IP 地址

Windows Machine File Copy - DevOps task and IP address

我正在 Azure DevOps 上构建发布管道。我发布的一部分是将一堆文件复制到 Azure VM。据我了解,目标机器需要打开PowerShell 5986端口。

我有一个打开了端口 5986 的虚拟机(我通过使用 "PowerShell on Target Machines" 任务在这个虚拟机上远程调用一些命令来验证这一点)。 我添加了 "Windows Machine File Copy" 任务并填写了字段: - 资源 - 机器 - 管理员登录 - 密码 - 目标文件夹

在"Machines"字段中,我输入了目标机器的IP。

由于 运行 发布,我收到一个错误:

Failed to Create PSDrive with Destination: '\11.11.11.11\C$\TargetDirectory', ErrorMessage: 'The network path was not found' The network path was not found

我也尝试将 IP 地址与端口放在一起,格式为:11.11.11.11:5986

然后,我得到了这个错误:

Cannot convert value ".97.151.221:5986" to type "System.Uri". Error: "Invalid URI: The hostname could not be parsed."

文档 (https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/windows-machine-file-copy?view=azure-devops) 表示允许带有端口的 IP 地址。

这里有什么问题?

答案很简单,DevOps 任务实际上是 运行 您 VM 上的 PowerShell 并试图创建 PSDrive。

尝试使用下面屏幕截图中提到的任务:

解决方案是转到目标服务器并共享将要复制文件的目录。在 Windows 中,只需转到目录的属性,共享选项卡,并将其共享给在 VSTS 任务中使用的用户。

问题是因为您无法使用该任务跨 Windows 域 复制文件!也就是说,如果你在主机A上搭建,想复制文件到主机B,那么A和B必须在同一个Windows域,否则你会得到类似

的错误
##[error]Failed to Create PSDrive with Destination: '\your-server-name-or-ip\some\path', ErrorMessage: 'The network path was not found'

也就是说,如果您使用的是托管代理,则您无法将包含该任务的文件复制到您拥有的任何主机,无论它是否具有 public IP ,或 FQDN,因为它们不在同一个 Windows 域中!

您有两种解决方法:

  • 如果目标是 Azure VM 或 Azure 存储,请使用 Azure 文件复制任务
  • 使用私有托管代理并确保你的目标主机和你的私有代理在同一个Windows域

最后但并非最不重要的一点,文档应该说清楚!解决问题浪费了我很多时间!

我在执行这些操作时遇到了完全相同的错误:

  • 最初在我的发布管道中,我有一个代理作业,我在该作业下创建了一个Windows机器文件复制任务并填写所有细节正确。我用我的目标服务器(一个 Windows Azure VM)的 public IP 地址设置了机器字段,我总是收到你报告的这个错误。

  • 我尝试改用 Azure 文件复制任务,但我遇到了另一个问题(错误消息:无法获取 ResourceGroup 中所有资源的 FQDN:{resourceGroupName})我无法解决费了好大劲才搞定。

这是对我有用的解决方案:

  • 我 运行 不是 运行 代理作业,而是 部署组作业。使用部署组,我不需要 IP 地址即可连接到我的 VM。为您的 Azure VM 设置部署组非常简单并且解释得很好 here

  • 我在我添加的部署组作业下创建了一个 Windows 机器文件复制任务。我为该任务填写了相同的详细信息,除了我在机器字段中输入了 计算机名称 而不是 Windows VM 的 IP 地址和文件复制任务 运行成功!

希望对您有所帮助

转到目标文件夹,右键单击文件夹 select 属性,共享选项在那里,单击那个并共享所有人选项在那里