我在Azure DevOps上构建发布管道。我发布的一部分内容是将一堆文件复制到Azure VM。据我了解,目标计算机需要打开PowerShell 5986端口。
我有一个开放了端口5986的VM(我通过使用“目标计算机上的PowerShell”任务远程调用此VM上的一些命令来验证这一点)。 我添加了“ Windows Machine File Copy”任务并填充了字段: - 资源 -机器 -管理员登录 -密码 -目标文件夹
在“机器”字段中,输入目标机器的IP。
由于运行该发行版,导致出现错误:
无法创建带有目的地的PSDrive: '\\ 11.11.11.11 \ C $ \ TargetDirectory', 错误消息:“找不到网络路径”网络路径为 找不到
我还尝试将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地址。
这是什么问题?
答案 0 :(得分:6)
在执行这些操作时,我得到了完全相同的错误:
最初在发布管道中,我有一个 agent作业,并且在该作业下创建了Windows计算机文件复制任务,并正确填写了所有详细信息。我将Machines字段设置为目标服务器(Windows azure VM)的公共IP地址,并且总是收到您报告的错误。
我尝试改用Azure文件复制任务,但遇到另一个问题(错误消息:无法获取ResourceGroup {resourceGroupName}中所有资源的FQDN),此后我无法解决很多努力。
这是对我有用的解决方案:
我没有运行代理作业,而是运行了部署组作业。使用部署组,我不需要IP地址即可连接到我的VM。为您的Azure VM设置部署组非常简单,并且很好地解释了here
我在添加的Deployment Group作业下创建了Windows Machine File Copy任务。我为任务填写了相同的详细信息,除了在Windows机器字段中输入计算机名而不是Windows VM的IP地址,并且文件复制任务成功运行!
我希望这会有所帮助
答案 1 :(得分:1)
问题在于,您无法使用该任务跨 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域中!
有两种解决方法:
最后但并非最不重要的一点是,该文档应该明确说明!解决这个问题浪费了我很多时间!
答案 2 :(得分:0)
解决方案是转到目标服务器并共享要复制文件的目录。在Windows中,只需转到目录的“属性”的“共享”选项卡,然后将其共享给VSTS任务中使用的用户即可。
答案 3 :(得分:-2)