Azure Pipeline CopyFilesOverSSH@0报错‘seek 32768 not supported...’求解决
解决方案
一、调整CopyFilesOverSSH@0任务参数的方法
你不需要修改服务连接,直接在YAML的inputs中添加blockSize和concurrency参数即可控制传输的块大小和并发数,这两个参数属于任务本身的配置,和服务连接无关。
修改后的YAML示例:
- task: CopyFilesOverSSH@0 displayName: taskUI inputs: sshEndpoint: c715e647-409c-4971-84ac-80b1a07e2049 sourceFolder: /home/vsts/work/1/s/deploy/taskUI contents: '*.zip' targetFolder: /Inbox failOnEmptySource: true blockSize: 1024 # 根据实际情况调整,比如1024、2048等 concurrency: 1 # 强制设置并发数为1,适配IBM目标服务器
说明:
blockSize单位为KB,你可以逐步测试合适的数值,确保传输稳定。
二、Azure托管代理用Bash连接FTP的方案
Azure托管代理预装了lftp工具,支持用户名/密码认证的FTP传输,无需额外安装依赖。
步骤1:配置凭证变量
将FTP的用户名和密码添加到Pipeline的变量组或管道变量中(勾选“保密”选项隐藏明文),比如命名为FTP_USERNAME和FTP_PASSWORD。
步骤2:添加Bash上传任务
在YAML中添加Bash任务,使用lftp命令完成上传:
- task: Bash@3 displayName: Upload via FTP inputs: targetType: 'inline' script: | # 上传目标文件夹下的zip文件 lftp -u $(FTP_USERNAME),$(FTP_PASSWORD) ftp://你的FTP服务器地址 -e " set ftp:ssl-allow no; # 目标FTP支持SSL则改为yes cd /Inbox; # 切换到远程目标文件夹 put /home/vsts/work/1/s/deploy/taskUI/*.zip; # 上传本地文件 quit "
说明:如果目标是SFTP服务器,只需将
ftp://替换为sftp://即可,lftp同样支持SFTP协议。
内容的提问来源于stack exchange,提问作者BADavid
相关产品推荐
相关产品推荐

