Github Actions自动部署失败:rsync文件IO错误求助
问题描述
我尝试通过GitHub Actions将代码自动部署至主机服务器时出现错误,错误日志截图如下:
我的Workflow配置文件内容如下:
name: Prosperium Production CI on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Check-out do repositório uses: actions/checkout@v1 - name: Deploy Ambiente de Produção uses: easingthemes/ssh-deploy@main env: SSH_PRIVATE_KEY: ${{secrets.SERVER_SSH_KEY}} ARGS: "-rltgoDzvO --delete" SOURCE: "/" REMOTE_HOST: ${{secrets.REMOTE_HOST}} REMOTE_USER: ${{secrets.REMOTE_USER}} REMOTE_PORT: ${{secrets.REMOTE_PORT}} TARGET: ${{secrets.REMOTE_TARGET}}
我已经尝试修改REMOTE_PATH和SOURCE参数,但问题仍未解决,请求技术支持。
问题分析
从错误截图可见,这是rsync执行时的权限问题:无法删除服务器上的部分文件/目录,rsync退出码23通常代表部分文件操作失败(比如权限不足、文件被占用)。另外你的SOURCE: "/"配置存在致命问题——这会尝试同步GitHub Runner的整个根目录,而非你的代码仓库目录,这是引发问题的核心原因之一。
修复步骤
修正SOURCE参数
把SOURCE改为代码仓库的根目录(./),如果是前端项目需要部署构建产物,可指定具体子目录(比如./dist/):SOURCE: "./"检查服务器目标目录权限
- 确认
REMOTE_TARGET对应的服务器目录,所有者是REMOTE_USER,或该用户拥有该目录下文件的读写、删除权限。 - 如果目标目录有需要保留的文件(如配置文件、环境变量文件),在
ARGS中添加--exclude排除,避免rsync尝试删除:ARGS: "-rltgoDzvO --delete --exclude='config.php' --exclude='.env'"
- 确认
调整rsync参数
当前ARGS中的--delete会删除目标目录中源目录不存在的文件,若服务器有自动生成的日志、缓存文件,可去掉--delete,或用--delete-excluded配合--exclude精准控制。添加--verbose能获取更详细的错误日志,方便定位具体问题文件:ARGS: "-rltgoDzvO --verbose --delete"升级checkout Action版本
你使用的actions/checkout@v1版本过旧,建议升级到最新稳定版v4,规避潜在兼容性问题:- name: Check-out do repositório uses: actions/checkout@v4验证SSH密钥配置
确保SERVER_SSH_KEY对应的私钥完整粘贴到GitHub Secrets中(包含首尾的密钥标识行),且服务器的authorized_keys已正确配置该公钥,同时密钥对应的用户拥有操作目标目录的权限。
验证方法
修改配置后,在GitHub仓库的Actions页面手动触发该Workflow,查看详细执行日志,确认rsync命令是否正常运行。若仍有错误,根据日志中提示的具体文件路径,针对性调整权限或排除规则。
内容的提问来源于stack exchange,提问作者Jardel Lazzarotto

