迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 操作系统 >

Linux服务器svn远程代码同步

作者:迹忆 最近更新:2022/12/04 浏览次数:

《搭建svn服务项目并且同步代码到项目目录》这篇文章中,我们简单介绍了使用svn将提交的代码同步到工作目录的实现方法。但是这里有一个问题,就是svn服务和我们的工作目录是在同一台服务器上面的。如果说我们的应用采用分布式部署的话,那岂不是在每一台应用服务器上面都部署svn服务,并且需要多次提交相同的代码。

本章我们就来介绍两种远程同步代码的方式

在hooks中使用scp命令进行远程同步

svn服务器:192.168.5.201
应用服务器:192.168.5.200

在这里我们需要借助scp远程拷贝文件命令。还有我们需要在5.201主机上面新建/STest目录,并且在该目录下检出一份代码。

# mkdir /STest
# cd /STest
# svn checkout svn://192.168.5.201 –username svnuser –password svnuser123

每次提交更新以后,我们先使用之前在一台服务器上面同步代码的方法更新到/STest目录下,然后利用svnlook changed 命令查看更新的文件(其实这里就是在查找/STest目录下更新的文件),最后再利用scp命令将/STest目录下更新的文件拷贝到5.200上对应的目录下。

在hooks目录下面新建post-commit文件,添加如下shell代码

#!/bin/bash
export LANG=zh_CN.UTF-8
 
REPOS="$1"
REV="$2"
SVN=/usr/bin/svn
SVNLOOK=/usr/bin/svnlook
WEB=/App
LOG=/data/home/auto_svn.log
 
#更新最新版本内容到本地的/STest
$SVN update $WEB --username svnuser --password svnuser123
 
#查看更新的文件
upfile=`$SVNLOOK changed -r $REV $REPOS`
 
#依次拷贝更新的文件到目标主机
for file in $upfile
do
 
  if [ -d /STest/${file} ]; then
#判断是否有新建的文件夹,如果是文件夹先利用ssh登录到目标主机,
#在目标主机上创建文件夹
        ssh root@192.168.18.239 "mkdir /www/App/${file}; exit"
  elif [ -f /STest/${file} ]; then
                   #如果更新的是文件,则直接利用scp命令远程拷贝文件到相应的目标文件
        scp  /STest/${file} root@192.168.18.239:/www/App/${file}
 
  fi
 
done

此种方式需要借助在5.201上存放一份儿代码,可以认为是scp拷贝文件临时借用的代码。虽说麻烦一些,但是在目标主机上的代码中不会存在.svn目录,可以说提高了应用的安全性。当然了,对于在应用代码中存在.svn的这种情况是可以通过nginx或者apache的重写功能过滤掉。

利用ssh登录目标主机更新文件

这种方式不同于上面的方式的是不需要在本地在存一份临时代码。

首先需要做的就是在目标主机5.200上新建应用项目/www/App,然后进入该应用目录,检出一份儿代码

#mkdir /www/App
#cd /www/App
#svn checkout svn://192.168.5.201 –username svnuser –password svnuser123

然后在每次有更新的代码提交的时候,使用ssh登录到目标主机,使用svn update 更新应用代码。

同样需要在hooks目录下新建post-commit 文件,编写shell代码如下

#!/bin/bash
export LANG=zh_CN.UTF-8
 
REPOS="$1"
REV="$2"
SVN=/usr/bin/svn
SVNLOOK=/usr/bin/svnlook
MASTERDIR=/www
TARGETDIR=/App
LOG=/data/home/auto_svn.log
#查看更新的文件夹
updirs=`$SVNLOOK dirs-changed -r $REV $REPOS`
 
CHANGEDIR=$(echo "$updirs" | head -1)  # updirs里的最上级目录
 
#使用ssh登录目标主机,进行更新操作
ssh root@192.168.5.200 “export LANG=zh_CN.UTF-8;  svn update --username svnuser --password svnuser123  ${MASTERDIR}${TARGETDIR}”

上面这种方法不好的地方就是代码中会存在.svn目录,这样存在安全性问题。不过这是可以通过nginx重写功能过滤掉的。

上面两种方式各有优劣,我个人喜欢使用第一种方式。希望本章的介绍能帮到大家。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Linux 中安装 MySQL 客户端

发布时间:2023/05/09 浏览次数:72 分类:MySQL

在 Linux 中安装 MySQL 客户端的命令。Linux 和 Unix 等环境作为命令行界面工作,仅在命令的帮助下运行。

在 Linux 中更新 YUM

发布时间:2023/05/04 浏览次数:82 分类:操作系统

本文介绍了 Linux 中的 yum update 命令。本文将教我们如何在 Linux 中更新 YUM,以及如何在 Linux 系统上安装、更新、删除、查找和管理包。

在 Linux 中安装 Deb 文件

发布时间:2023/05/04 浏览次数:130 分类:操作系统

本文介绍如何在 Linux 中安装 deb 文件。在这篇 Linux 文章中,我们将学习如何在 Linux 系统上安装 .deb(Debian 软件包)文件。 我们还将看到如何在安装后删除 .deb 文件。

Linux 中的 lsof 命令

发布时间:2023/05/04 浏览次数:82 分类:操作系统

在这篇 Linux 文章中,我们将了解 Linux 操作系统中的 lsof 命令。 我们将看到如何在 Linux 中将此命令用于不同目的。

Linux 中的 ps aux 命令

发布时间:2023/05/04 浏览次数:69 分类:操作系统

本篇文章将讨论 Linux 中的 ps aux 命令。如果将 aux 快捷方式与 ps 命令一起使用,它将显示用户需要的最多信息,并可以为您提供系统运行进程的当前状态。

Linux 中的 NTP

发布时间:2023/05/04 浏览次数:137 分类:操作系统

本篇文章将讨论 Linux 中的 ntp。NTP 是大多数 IT 基础设施使用的核心协议。 使用它的目的是同步日期和时间信息。

在 Linux 中计算文件中的唯一行

发布时间:2023/05/04 浏览次数:70 分类:操作系统

计算文件中的唯一行是 Linux 中的一项常见任务,可以使用多种不同的工具和方法来执行此操作。使用 sort 和 uniq 命令计算文件中的唯一行数

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便