You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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服务会自动加载)

额外注意事项

  1. 密钥权限:在Ubuntu runner上必须将私钥权限设为600,否则SSH会拒绝使用(这是SSH的强制安全要求)
  2. 目标路径创建:如果远程目标目录不存在,添加--mkdir参数让rsync自动创建,或者提前通过SSH执行创建命令:
    ssh -i my_edcsa.pem -p 55297 -o StrictHostKeyChecking=no my-username@${{ secrets.SERVER }} "mkdir -p /cygdrive/c/project/destination"
    
  3. 工作流兼容性:这种非标准部署方式本身不受GitHub Actions官方特殊支持,但只要SSH和rsync环境配置正确,完全可以正常运行——你遇到的问题只是环境路径冲突,不是工作流本身的限制。

内容的提问来源于stack exchange,提问作者BlueMaegi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:52:27