构建文件打包上传至服务器后丢失,请求排查方法
问题排查:GitHub Actions打包上传后服务器找不到文件
构建文件打包并上传至服务器的操作步骤均显示执行完成,但目标服务器上找不到devServer.zip文件,无法确定是打包环节未生成文件还是上传环节未成功发送文件。已确认服务器22端口处于开放状态。
GitHub Actions配置
- name: Generate deployment package run: zip -r devServer.zip . -x '*.git*' './src/*' './node_modules/*' - name: Deploy build outputs uses: appleboy/scp-action@master with: host: ${{ secrets.REMOTE_IP }} username: ${{ secrets.REMOTE_SSH_ID }} key: ${{ secrets.REMOTE_SSH_KEY }} source: "devServer.zip" strip_components: 1 target: "/home/ubuntu"
部署环节执行日志
tar all files into /tmp/sRWFsGKD.tar.gz 23 remote server os type is unix 24 scp file to server. 25 create folder /home/*** 26 untar file sRWFsGKD.tar.gz 27 remove file sRWFsGKD.tar.gz
更换source路径后的错误
tar: empty archive
排查方向与方法
- 先确认打包环节是否生成有效文件:
- 在打包步骤后添加验证命令,比如
ls -l devServer.zip或du -h devServer.zip,查看文件是否存在、大小是否正常。如果文件大小为0,说明zip命令的排除规则可能有问题,检查路径格式是否匹配当前工作目录的结构。
- 在打包步骤后添加验证命令,比如
- 理解scp-action的工作逻辑:
- appleboy/scp-action会将指定的source文件打包成tar包上传,在服务器解压后会自动删除tar包,不会保留原始的devServer.zip文件。日志中的
untar操作就是这个过程,所以服务器上找不到devServer.zip是正常的,应该查看/home/ubuntu目录下的解压文件。
- appleboy/scp-action会将指定的source文件打包成tar包上传,在服务器解压后会自动删除tar包,不会保留原始的devServer.zip文件。日志中的
- 验证
strip_components参数的影响:strip_components: 1会在解压时去掉第一层目录,如果打包时是直接压缩当前目录(.)的内容,这个参数会让文件直接放到/home/ubuntu下;如果zip内包含一层目录,则会移除该目录层。可以临时去掉这个参数测试,或者登录服务器查看解压后的目录结构。
- 检查服务器实际解压路径:
- 日志中
create folder /home/***的***是隐藏的路径,实际登录服务器查看/home/ubuntu下的文件,或者确认是否有其他目录被创建。
- 日志中
- 确认source路径的正确性:
- 出现
tar: empty archive说明指定的source文件不存在或为空,在打包步骤后添加pwd和ls命令,确认devServer.zip的生成路径与scp-action执行时的工作目录一致。
- 出现
内容的提问来源于stack exchange,提问作者Mamochi
相关产品推荐
相关产品推荐

