Azure Pipeline:通过 SSH 从项目复制在远程计算机上运行 shell 命令

Azure Pipeline Run shell commands on remote machine via SSH Copy from Artifacts

提问人:Cruik 提问时间:11/16/2023 更新时间:11/21/2023 访问量:49

问:

我正在尝试通过 azure 管道在我的专用 ubuntu 服务器上复制我的工件。

当我使用“通过 SSH 复制文件”任务时,我总是收到错误

“无法连接到远程计算机。验证 SSH 服务连接详细信息。无法连接到远程计算机。验证 SSH 服务连接详细信息。错误:所有配置的身份验证方法都失败”

当我使用与“SSH - 在远程计算机上运行 shell 命令”任务相同的 SSH 连接时,连接有效,我可以连接到我的服务器并执行命令。

所以我的问题是,是否可以运行 ssh 命令并从管道工件复制到我的服务器?

我的代码来尝试复制任务:

echo 'i am connected'
echo '--------Start to copy --------'
sudo cp $(System.DefaultWorkingDirectory)/_Lobi.Web/drop /root/test -r
echo '--------Copy END--------'

导致错误

cp:无法统计“D:ar1a/_Lobi.Web/drop”:没有这样的文件或目录

azure-devops azure-pipelines

评论

1赞 Ziyang Liu-MSFT 11/16/2023
使用“SSH”任务时,命令将在远程计算机上运行。但“$(System.DefaultWorkingDirectory)/_Lobi.Web/drop”是管道代理上项目的路径。在远程计算机上找不到管道代理上的路径,因此收到错误“没有此类文件或目录”。根据目前的情况,SSH连接本身没有问题。若要缩小问题范围,建议使用较新版本创建新的 Ubuntu VM,并检查“通过 SSH 复制文件”任务是否有效。在 ubuntu 20.04 上测试,它工作正常。
0赞 Cruik 11/16/2023
@ZiyangLiu-MSFT 啊对不起,缺少一些重要的东西。我正在使用 Ubuntu 22.04 服务器。令我感到困惑的是,我可以使用具有普通 SSH 的复制文件任务连接相同的 SSH 连接,但不能通过 ssh 复制文件 - 任务
1赞 Ziyang Liu-MSFT 11/21/2023
似乎“通过SSH复制文件”任务和“SSH”任务的工作方式不同。为了确定此问题是否与您的服务器环境有关,您可以创建一个新的 ubuntu VM,并测试“通过 SSH 复制文件”任务是否适用于它。解决方法是,如果使用的是 Azure VM,则可以使用任务 Azure 文件复制将文件直接复制到 VM。如果没有,可以使用此任务,先复制到存储帐户,然后再复制到服务器。

答:

0赞 wenbo 11/21/2023 #1
  1. 创建服务连接 若要连接到 Ubuntu 服务器,请在 Azure DevOps 门户中将连接名称记录为 sshEndpointenter image description here

  2. 对示例进行编码:

     trigger: none
    
     steps:
     - task: PowerShell@2
       displayName: Run Script --- write txt file
       inputs:
         targetType: inline
         script: |
           "Hello world" | out-file "test.txt"
    
     - task: PowerShell@2
       displayName: Run Script --- check file in DefaultWorkingDirectory
       inputs:
         targetType: inline
         script: |
           Get-ChildItem -Path $(System.DefaultWorkingDirectory) -Include test.txt
    
     - task: CopyFilesOverSSH@0
       inputs:
         sshEndpoint: myUbuntu
         sourceFolder: $(System.DefaultWorkingDirectory)
         contents: 'test.txt' # string. Required. Contents. Default: **.
         targetFolder: '/home/azureuser'
         readyTimeout: '20000' # string. Required. SSH handshake timeout. Default: 20000.
    
  3. 我的结果是,test.txt文件已经复制到远程:

    enter image description here

  4. 注意文件夹的权限,可能会遇到“Permission denied Local”错误,请使用 chmod 命令解决此问题。

评论

0赞 Cruik 11/22/2023
我稍后会尝试,如果有效,请接受您的回答,谢谢!
0赞 Cruik 11/28/2023
啊,我完全看错了。我已经试过了,当我使用 copyFilesOverSSH - 任务时,我的问题中出现了错误消息 :/