在原来的环境中,192.168.1.100
是一台 Windows 服务器,并通过 Samba 共享了 versioncode
目录,Linux 服务器(controller
)使用 mount -t cifs
挂载该共享目录,从而让 Jenkins 在部署时能够直接拷贝代码。
但现在 192.168.1.100
已经更换为 Linux 服务器,Samba 共享方式不再适用,我们需要调整方案。本文介绍三种可行的解决方案:
NFS(网络文件系统)是一种允许 多个客户端挂载远程文件目录 的分布式文件系统协议。它适用于长期共享目录的场景。
✅ 适用于多台客户端同时访问同一目录
✅ 支持文件直接读取和写入,就像本地磁盘一样
✅ 无需每次同步文件,改动立即生效
❌ 需要 NFS 服务器长期运行
❌ 对远程文件的读写速度受网络带宽影响
在 192.168.1.100
上配置 NFS
sudo apt install nfs-kernel-server # Debian/Ubuntu
sudo yum install nfs-utils -y # CentOS/RHEL
mkdir -p /mnt/versioncode
chmod 777 /mnt/versioncode
编辑 /etc/exports
,添加:
/mnt/versioncode 10.255.100.0/24(rw,sync,no_root_squash,no_subtree_check)
⚠️
10.255.100.0/24
表示允许10.255.100.x
访问共享目录,若仅允许controller
访问,则替换为controller
的 IP。
sudo systemctl restart nfs-server
sudo exportfs -rav
sudo yum install nfs-utils -y # CentOS/RHEL
sudo apt install nfs-common -y # Ubuntu/Debian
mount -t nfs 192.168.1.100:/mnt/versioncode /mnt/samba
编辑 /etc/fstab
,添加:
192.168.1.100:/mnt/versioncode /mnt/samba nfs defaults 0 0
然后执行:
mount -a
Rsync 是用于 同步本地和远程文件 的高效工具,采用 增量传输 方式,仅同步更改的部分,减少网络流量。
✅ 支持增量同步,节省带宽
✅ 可以本地、远程、跨服务器同步
✅ 支持 SSH 进行安全传输
❌ 不支持远程直接挂载和操作文件,只能同步
示例(从 controller
服务器同步代码到 192.168.1.100
):
rsync -avz /path/to/code/ [email protected]:/mnt/versioncode/
sudo yum install rsync -y # CentOS/RHEL
sudo apt install rsync -y # Ubuntu/Debian
rsync -avz /path/to/code/ [email protected]:/mnt/versioncode/
说明:
-a
保持文件属性-v
显示详细信息-z
压缩数据- 需要
[email protected]
具备 SSH 访问权限
如果不想输入密码,可以配置 SSH 免密登录:
ssh-keygen -t rsa
ssh-copy-id [email protected]
SCP(安全拷贝协议)用于 加密传输文件,基于 SSH 进行安全传输,适合一次性文件传输。
✅ 传输过程加密,安全性高
✅ 操作简单,适用于一次性文件传输
❌ 每次都要传输全部文件,不支持增量同步
❌ 不能像 NFS 那样直接访问远程文件
示例(将代码拷贝到 192.168.1.100
):
scp -r /path/to/code/ [email protected]:/mnt/versioncode/
方式 | 是否支持挂载 | 是否长期挂载 | 是否增量同步 | 适用场景 | 安全性 | 适用场景 | 是否支持多客户端 |
---|---|---|---|---|---|---|---|
NFS | ✅ 是 | ✅ 是 | ❌ 否 | 远程目录共享 | ⚠️ 需要额外配置 | 长期共享目录 | ✅ 是 |
Rsync | ❌ 否 | ❌ 否 | ✅ 是 | 远程同步文件 | ✅ 安全 | 定期同步文件 | ❌ 否 |
SCP | ❌ 否 | ❌ 否 | ❌ 否 | 一次性文件传输 | ✅ 安全 | 一次性传输 | ❌ 否 |
推荐方案:
controller
仍然需要长期访问 192.168.1.100
目录,建议使用 NFS。192.168.1.100
,rsync
是最简单的方式。你可以根据实际需求选择最合适的方式来调整 Jenkins 部署流程!