【问题标题】:Windows Machine File Copy - DevOps task and IP addressWindows 机器文件复制 - DevOps 任务和 IP 地址
【发布时间】:2019-10-20 22:05:53
【问题描述】:

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

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

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

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

无法使用目标创建 PSDrive: '\\11.11.11.11\C$\TargetDirectory', ErrorMessage: 'The network path was not found' 网络路径是 没找到

我还尝试将 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 地址。

这里有什么问题?

【问题讨论】:

  • 尽量放机器主机名而不是IP
  • Get-ChildItem -Path ''\\11.11.11.11\C$' 是否给您任何回应?请注意,这没有使用任何 powershell 端口...您所指的端口是 WinRM over HTTPS 端口,不用于 UNC 文件系统访问。
  • @ShaykiAbramczyk 我的目标虚拟机没有任何 DNS 名称,它也不在任何域中。
  • @Lee_Dailey 我应该从哪里调用这个命令?
  • @Loreno - 你在哪里运行你的代码。 [grin] 只需将其放入脚本中,就在您当前的驾驶地图行之前,并将其保存在某个地方以便您查看。

标签: azure powershell azure-devops azure-pipelines azure-pipelines-release-pipeline


【解决方案1】:

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

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

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

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

  • 我没有运行代理作业,而是运行了部署组作业。使用部署组,我不需要 IP 地址来连接到我的 VM。为您的 Azure VM 设置部署组非常简单,并且解释清楚 here

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

希望对你有帮助

【讨论】:

  • 创建虚拟机后必须手动创建部署组?如果是,那么这种方法无法实现自动化。例如:创建 CM 的发布管道,然后复制文件,然后安装。
  • 对于计算机名称,您是否使用了变量,因为组中的每个部署目标都有不同的名称?如果是这样,它是一个标准变量吗?
  • @Mido 是的,我使用了一个变量,并将其指定为 $(vmComputerName) 之类的东西。我在变量选项卡中为其设置了值。
【解决方案2】:

问题是因为您不能使用该任务跨 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'

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

您有两种解决方法:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案4】:

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

    【讨论】:

    • 但是为什么我的共享目标目录后不起作用?
    【解决方案5】:

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

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

    【讨论】:

    • 关于这个任务的问题。你是怎么解决这个问题的?!
    • 您好 Loreno,我觉得您将存储设备暴露在互联网上的方式存在一些问题。有一些防火墙问题,否则它工作得很好。
    • 您能否验证除了 Azure DevOps 之外,您是否能够从桌面访问您的文件位置?
    • @VikasGoyal 我的目标 VM 是 Azure 中的一台机器。在其 NSG(so,防火墙)中,RDP 端口和 5986 端口是开放的
    • 试试这个,让我知道你是否能够从你的桌面执行它...如果它可用,那么只有 Azure 能够访问它。否则它和不可用google.com/amp/s/www.faqforge.com/windows/…
    猜你喜欢
    • 2020-04-12
    • 2020-04-05
    • 2022-11-09
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多