GitHub Actions是否支持rsync从Ubuntu Runner部署到Windows Server?
解决Ubuntu GitHub Actions通过rsync部署到Windows Server 2022的路径错误问题
问题核心
你遇到的路径拼接错误,根源是远程Windows机器上默认调用的rsync不是Cygwin版本,而是Git for Windows自带的rsync。Git的rsync在解析Cygwin风格路径时会出错,导致生成/cygdrive/c/Users/my-username/C:/Program Files/Git/cygdrive/c/project/destination这种混乱路径。
直接修复方案
在rsync命令中添加--rsync-path参数,明确指定远程端Cygwin的rsync绝对路径(根据你Cygwin的安装路径调整,比如默认64位是/cygdrive/c/cygwin64/bin/rsync):
- name: rsync deploy working-directory: my/project/bin run: | chmod 600 my_edcsa.pem # 确保密钥权限符合SSH安全要求 rsync -e "ssh -i my_edcsa.pem -p 55297 -o StrictHostKeyChecking=no" \ --rsync-path="/cygdrive/c/cygwin64/bin/rsync" \ --archive --delete \ # 可选:添加归档、删除远程多余文件的参数 publish/wwwroot my-username@${{ secrets.SERVER }}:/cygdrive/c/project/destination
其他可选修复方式
如果不想每次命令都指定路径,可以调整远程机器的环境变量:
- 登录Windows机器的Cygwin终端,编辑用户目录下的
.bashrc或.profile文件,将Cygwin的bin目录放到PATH最前面:export PATH="/cygdrive/c/cygwin64/bin:$PATH" - 确保远程用户通过SSH登录时会加载这个配置(默认Cygwin SSH服务会自动加载)
额外注意事项
- 密钥权限:在Ubuntu runner上必须将私钥权限设为
600,否则SSH会拒绝使用(这是SSH的强制安全要求) - 目标路径创建:如果远程目标目录不存在,添加
--mkdir参数让rsync自动创建,或者提前通过SSH执行创建命令:ssh -i my_edcsa.pem -p 55297 -o StrictHostKeyChecking=no my-username@${{ secrets.SERVER }} "mkdir -p /cygdrive/c/project/destination" - 工作流兼容性:这种非标准部署方式本身不受GitHub Actions官方特殊支持,但只要SSH和rsync环境配置正确,完全可以正常运行——你遇到的问题只是环境路径冲突,不是工作流本身的限制。
内容的提问来源于stack exchange,提问作者BlueMaegi
相关产品推荐
相关产品推荐

