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

Lor*_*eno 5 powershell azure azure-devops azure-pipelines azure-pipelines-release-pipeline

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

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

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

由于运行该版本,我收到一个错误:

无法创建目标为“\\11.11.11.11\C$\TargetDirectory”的 PSDrive,错误消息:“找不到网络路径”找不到网络路径

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

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

无法将值“\23.97.151.221:5986”转换为类型“System.Uri”。错误:“无效的 URI:无法解析主机名。”

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

这里有什么问题?

Yus*_*diq 9

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

  • 最初在我的发布管道中,我有一个代理作业,我在该作业下创建了一个 Windows 机器文件复制任务,并正确填写了所有详细信息。我使用目标服务器(Windows azure VM)的公共 IP 地址设置了 Machines 字段,但我总是收到您报告的此错误。

  • 我尝试改用 Azure 文件复制任务,但我遇到了另一个问题(错误消息:无法获取 ResourceGroup 中所有资源的 FQDN:{resourceGroupName}),经过很多努力我无法解决。

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

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

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

我希望这有帮助


Rob*_*ert 5

问题是因为您不能使用该任务跨Windows 域边界复制文件!也就是说,如果您在主机 A 上构建并希望将文件复制到主机 B,那么 A 和 B 必须在同一个Windows Domain 中,否则您会得到类似这样的错误

##[error]Failed to Create PSDrive with Destination: '\\your-server-name-or-ip\some\path', ErrorMessage: 'The network path was not found'
Run Code Online (Sandbox Code Playgroud)

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

您有两个选择来解决它:

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

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