文章目录
从 Windows 共享到 Linux:Jenkins 代码部署方案调整
在原来的环境中,192.168.1.100
是一台 Windows 服务器,并通过 Samba 共享了 versioncode
目录,Linux 服务器(controller
)使用 mount -t cifs
挂载该共享目录,从而让 Jenkins 在部署时能够直接拷贝代码。
但现在 192.168.1.100
已经更换为 Linux 服务器,Samba 共享方式不再适用,我们需要调整方案。本文介绍三种可行的解决方案:
方案 1:使用 NFS(推荐)
介绍
NFS(网络文件系统)是一种允许 多个客户端挂载远程文件目录 的分布式文件系统协议。它适用于长期共享目录的场景。
特点
✅ 适用于多台客户端同时访问同一目录
✅ 支持文件直接读取和写入,就像本地磁盘一样
✅ 无需每次同步文件,改动立即生效
❌ 需要 NFS 服务器长期运行
❌ 对远程文件的读写速度受网络带宽影响
适用场景
- 需要在多个 Linux 服务器间 共享目录(如日志、代码仓库)
- 服务器之间 持续访问和操作文件(如 Jenkins 需要挂载远程目录)
- 需要一个长期共享的目录,并允许多个客户端访问。
在 192.168.1.100 上配置 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
修改 NFS 共享配置
编辑 /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。
启动 NFS 并应用配置
sudo systemctl restart nfs-server
sudo exportfs -rav
在 controller 服务器上挂载 NFS
安装 NFS 客户端
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
方案 2:使用 Rsync(Remote Sync) 同步文件
介绍
Rsync 是用于 同步本地和远程文件 的高效工具,采用 增量传输 方式,仅同步更改的部分,减少网络流量。
特点
✅ 支持增量同步,节省带宽
✅ 可以本地、远程、跨服务器同步
✅ 支持 SSH 进行安全传输
❌ 不支持远程直接挂载和操作文件,只能同步
适用场景
- Jenkins 定期同步代码 到远程服务器
- 需要高效的 远程备份和文件同步
示例(从 controller
服务器同步代码到 192.168.1.100
):
rsync -avz /path/to/code/ root@192.168.1.100:/mnt/versioncode/
在 controller 服务器上安装 rsync
sudo yum install rsync -y # CentOS/RHEL
sudo apt install rsync -y # Ubuntu/Debian
通过 rsync 复制文件
rsync -avz /path/to/code/ root@192.168.1.100:/mnt/versioncode/
说明:
-a
保持文件属性-v
显示详细信息-z
压缩数据- 需要
root@192.168.1.100
具备 SSH 访问权限
如果不想输入密码,可以配置 SSH 免密登录:
ssh-keygen -t rsa
ssh-copy-id root@192.168.1.100
方案 3:使用 SCP 复制
介绍
SCP(安全拷贝协议)用于 加密传输文件,基于 SSH 进行安全传输,适合一次性文件传输。
特点
✅ 传输过程加密,安全性高
✅ 操作简单,适用于一次性文件传输
❌ 每次都要传输全部文件,不支持增量同步
❌ 不能像 NFS 那样直接访问远程文件
适用场景
- 一次性复制文件,例如从本地拷贝文件到远程服务器
- 不需要频繁同步,只在部署时传输
- 只需简单的一次性文件传输,不需要增量同步。
示例(将代码拷贝到 192.168.1.100
):
scp -r /path/to/code/ root@192.168.1.100:/mnt/versioncode/
方案对比与选择
方式 | 是否支持挂载 | 是否长期挂载 | 是否增量同步 | 适用场景 | 安全性 | 适用场景 | 是否支持多客户端 |
---|---|---|---|---|---|---|---|
NFS | ✅ 是 | ✅ 是 | ❌ 否 | 远程目录共享 | ⚠️ 需要额外配置 | 长期共享目录 | ✅ 是 |
Rsync | ❌ 否 | ❌ 否 | ✅ 是 | 远程同步文件 | ✅ 安全 | 定期同步文件 | ❌ 否 |
SCP | ❌ 否 | ❌ 否 | ❌ 否 | 一次性文件传输 | ✅ 安全 | 一次性传输 | ❌ 否 |
推荐方案:
- 如果
controller
仍然需要长期访问192.168.1.100
目录,建议使用 NFS。 - 如果只是 Jenkins 需要拷贝文件到
192.168.1.100
,rsync
是最简单的方式。
你可以根据实际需求选择最合适的方式来调整 Jenkins 部署流程!🚀