使用GitHub Actions+appleboy/scp-action部署服务器遇Tar短读错误
问题分析与解决方案
核心问题
你遇到的短读错误和.ejs文件无关,是appleboy/scp-action的source配置错误导致的:
- 你设置的
source: "/*"会尝试打包整个GitHub Runner的根目录(包括系统核心文件、无权限访问的文件),而非你checkout下来的项目文件,这直接导致tar打包时无法正常读取文件,触发错误。
修复步骤
修正source路径
将source改为项目根目录的相对路径,比如:source: "." # 或者更精确地指定需要部署的文件/目录,比如: # source: "./src, ./views, ./public, package.json, app.js"这样只会打包当前checkout后的项目文件,不会涉及系统文件。
升级scp-action版本
你使用的v0.1.4是较旧的版本,存在一些已知的打包问题,建议升级到最新稳定版:uses: appleboy/scp-action@v0.1.7 # 可查看官方仓库获取最新版本号替代部署方案(可选)
如果scp-action依然有问题,可以改用直接在服务器拉取代码的方式,更稳定:- name: Deploy via SSH uses: appleboy/ssh-action@master with: host: ${{ secrets.DEPLOY_IP }} username: ${{ secrets.DPLY_USER }} password: ${{ secrets.DPLY_PWD }} script: | cd ${{ secrets.PROJECT_PATH }} git pull origin master npm install pm2 restart 1这种方式不需要打包传输文件,直接在服务器端拉取最新代码,避免了本地打包的问题。
额外注意
- 确认
target对应的服务器路径存在且有写入权限; - 若项目中有
.gitignore里的文件不需要部署,scp-action会自动忽略(如果使用./**或.作为source),无需额外配置。
内容的提问来源于stack exchange,提问作者thetechguy61705
相关产品推荐
相关产品推荐

