rsync推送构建产物到联调机需满足只传变更、免重传、可复现、不干扰,核心是用-a -z -v同步目录内容,配合--delete、--exclude及dry-run校验,封装脚本统一执行。

在多团队协同开发中,用 rsync 推送本地构建产物到联调测试机,核心是“只传变更、免重传、可复现、不干扰”。不需要搭建完整发布系统,也不依赖 Git 仓库状态,重点在于构建产物生成后,精准、安全、高效地同步到目标机器。
明确推送路径与权限准备
确保本地开发机和联调测试机都已安装 rsync,并且能通过 SSH 互通:
- 联调测试机需开放 SSH(默认 22 端口),推荐使用密钥登录,避免每次输密码;若测试机 SSH 端口非 22,需加 -e "ssh -p XXX"
- 确认目标路径存在且当前用户有写权限,例如 /opt/app-staging/your-project/
- 建议为每个团队/项目分配独立子目录(如 /opt/app-staging/team-a/),避免交叉覆盖
用归档模式同步,保留构建完整性
构建产物(如 dist/、build/)通常含静态文件、哈希命名资源、index.html 等。用 -a(归档)+ -z(压缩传输)+ -v(查看过程)组合最稳妥:
rsync -azv ./dist/ user@staging-host:/opt/app-staging/team-a/
- 注意源路径末尾的斜杠 /dist/:表示同步目录内容;若写成 /dist,则会把整个 dist 文件夹复制进去
- 首次推送全量,后续仅同步修改或新增文件(基于大小+修改时间双重判断),哪怕只改一个 JS 文件,也只传那个文件
- 自动保留权限、软链、时间戳,对前端资源缓存、source map 调试等很关键
规避常见协作冲突
多人共用一台联调机时,易出现覆盖、残留、权限混乱等问题,可通过以下方式控制:
- 加 --delete:同步前先清理目标目录中源端不存在的文件(防止旧 CSS/JS 残留导致样式错乱)
- 加 --exclude=".DS_Store" --exclude="node_modules" --exclude="*.log":排除无关文件,减少误传
- 加 --rsync-path="sudo rsync"(需提前配置免密 sudo 权限):当目标路径属主非当前用户时,仍可写入
- 推送前可加简单校验,例如:rsync -n -av ./dist/ user@staging-host:/path/(-n 表示 dry-run,预览哪些文件会被操作)
封装为脚本提升协作效率
团队内统一推送逻辑,避免各人参数不一致。例如创建 push-to-staging.sh:
#!/bin/bash
RSYNC_OPTS="-azv --delete --exclude='.DS_Store' --exclude='*.map'"
rsync $RSYNC_OPTS ./dist/ team-dev@192.168.50.100:/opt/app-staging/myapp/
- 提交该脚本到项目根目录,新人拉代码后 chmod +x 即可执行
- 可配合 package.json 的 script 字段,如 "staging": "sh push-to-staging.sh",运行 npm run staging 一键推送
- 若测试机支持 HTTP 访问,推送完成后可 curl 触发一次健康检查接口,快速验证是否可访问

















