CentOs6.8离线安装svn,并设置自动更新

  • 离线安装所需依赖
  • 离线安装 GCC,如果系统已经有 GCC 了,跳过这一步
  • 需要的 rpm 包
  • 安装顺序
  • 离线安装 openssl
  • 需要的代码
  • 编译
  • 设置环境变量
  • 离线安装 zlib
  • 需要的代码
  • 编译
  • 离线安装 svn
  • 需要的代码
  • 编译
  • 配置 svn
  • 建立 svn 版本库目录
  • 配置版本库
  • 配置 authz
  • 配置 passwd
  • 配置 svnserve.conf
  • 启动 svn 服务
  • 利用 svn 钩子 hooks/post-commit 实现代码自动部署
  • svn 服务器和 web 服务器是同一台机器
  • svn checkout 文件到 web 服务器部署目录
  • 配置 post-commit 文件
  • 测试自动更新

离线安装

svn,需要我们手动编译

svn,编译所需要的依赖有:

gcc,openssl,zlib

终端依次输入下列命令,无法正确输出信息的依赖,则需要安装:

gcc -v:输出gcc版本信息
openssl version:输出openssl版本信息
find /usr -name zlib.pc:输出zlib.pc的路径

离线安装所需依赖

所需文件打包下载地址:

离线安装 GCC,如果系统已经有 GCC 了,跳过这一步
需要的 rpm 包
kernel-headers-2.6.32-642.el6.x86_64.rpm
libgomp-4.4.7-17.el6.x86_64.rpm
libstdc++-devel-4.4.7-17.el6.x86_64.rpm
mpfr-2.4.1-6.el6.x86_64.rpm
ppl-0.10.2-11.el6.x86_64.rpm
cloog-ppl-0.15.7-1.2.el6.x86_64.rpm
cpp-4.4.7-17.el6.x86_64.rpm
glibc-devel-2.12-1.192.el6.x86_64.rpm
glibc-headers-2.12-1.192.el6.x86_64.rpm
gcc-4.4.7-17.el6.x86_64.rpm
gcc-c++-4.4.7-17.el6.x86_64.rpm

下载地址:http://ftp.iij.ad.jp/pub/linux/centos-vault/6.8/os/x86_64/Packages

安装顺序
rpm -ivh kernel-headers-2.6.32-642.el6.x86_64.rpm
rpm -ivh libgomp-4.4.7-17.el6.x86_64.rpm
rpm -ivh libstdc++-devel-4.4.7-17.el6.x86_64.rpm
rpm -ivh mpfr-2.4.1-6.el6.x86_64.rpm
rpm -ivh ppl-0.10.2-11.el6.x86_64.rpm
rpm -ivh cloog-ppl-0.15.7-1.2.el6.x86_64.rpm
rpm -ivh cpp-4.4.7-17.el6.x86_64.rpm
rpm -ivh glibc-devel-2.12-1.192.el6.x86_64.rpm
rpm -ivh glibc-headers-2.12-1.192.el6.x86_64.rpm
rpm -ivh gcc-4.4.7-17.el6.x86_64.rpm
rpm -ivh gcc-c++-4.4.7-17.el6.x86_64.rpm

如果安装时提示已经安装过,不用管,继续安装下一个就行,在全部安装完之后,终端内输入:gcc -v,如果正常显示版本信息,gcc即安装成功。

离线安装 openssl
需要的代码
openssl-1.0.0t

下载地址:https://ftp.openssl.org/source/old/1.0.0/openssl-1.0.0t.tar.gz

编译
tar -zxvf openssl-1.0.0t.tar.gz
cd openssl-1.0.0t
./config -fPIC
make depend
make install

执行 config 的时候使用-fPIC 选项,使得编译出来的静态库具有重定位能力。生成一个动态库时需要指定-fPIC。

设置环境变量

安装之后会在/usr/local 下生成一个 ssl 目录。 需要在/etc/profile 的 PATH 中增加如下内容:

PATH=/usr/local/ssl/bin:/sbin/:$PATH:/usr/sbin
export PATH

安装完之后,终端内输入:openssl version,如果正常显示版本信息,openssl即安装成功。

离线安装 zlib
需要的代码
zlib-1.2.11.tar.gz

下载地址:https://zlib.net/fossils/zlib-1.2.11.tar.gz

编译
tar -xvzf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
make install
cd /usr/local
ln -s zlib-1.2.11 zlib

安装完之后,终端内输入:find /usr -name zlib.pc,如果正常输出 zlib.pc 的路径,zlib即安装成功。

离线安装 svn

需要的代码
subversion-1.6.21.tar.gz
subversion-deps-1.6.21.tar.gz

下载地址:https://archive.apache.org/dist/subversion/subversion-1.6.21.tar.gzhttps://archive.apache.org/dist/subversion/subversion-deps-1.6.21.tar.gz

编译
tar zxvf subversion-1.6.21.tar.gz
tar zxvf subversion-deps-1.6.21.tar.gz #会自动解压到subversion-1.6.21下
cd subversion-1.6.21
./configure --with-openssl=/usr/local/ssl --with-zlib=/usr/local/zlib --without-serf
make
make install

安装完之后,终端内输入:svn --version,如果正常输出版本信息,svn即安装成功。

配置 svn

建立 svn 版本库目录

创建的时候先确保 /home/svn/repository 目录已经存在。

svnadmin create /home/svn/repository

执行完之后,/home/svn/repository/conf/目录下存在 3 个文件: authz、passwd、svnserve.conf。

配置版本库
cd /home/svn/repository/conf
配置 authz

vim authz,编辑之后,切换到命令模式,输入wq保存后退出。

[groups]
# users 是组名,tester 是组员,可以写多个,用 "," 分隔.如 users = tester,admin
users = tester
#此配置文件采用“基于路径的授权”策略,中括号里指定路径,以下列出对各用户的授权。包括只读 r,读写 rw。没有列出的用户,则不允许访问。
[/]
# 这里的意思是 users 组的成员都有 rw 的权限,rw 是读写得权限,也可以写成 tester=rw,只赋予某一个用户有读写权限
@users = rw
# 这里 *= 如果不写的话,下一级目录的用户不具备继承关系,也就是没有读写的权限。
*=
配置 passwd

vim passwd,编辑之后,切换到命令模式,输入wq保存后退出。

[users]
# authz 的用户名对应起来,后面是用户密码
tester = 123456
配置 svnserve.conf

vim svnserve.conf,编辑之后,切换到命令模式,输入wq保存后退出。 注:原文件属性都是前面有#注释掉的,需要删除#。

anon-access = none          # 使非授权用户无法访问(read 改为 none)
auth-access = write           # 使授权用户有写权限
password-db = passwd    # 指明密码文件路径
authz-db = authz                # 访问控制文件
启动 svn 服务

启动服务,-d 指明以守护模式运行,svn 自动在 3690 端口监听。3690 是默认端口,可以使用–listen-port=或者–listen-host=来指定其它端口。-r 选项用来指定 svn 服务的根目录,这样用户就可以使用相对路径访问,而不用提供完整路径。

svnserve –d –r /home/svn/repository/

注:停止服务使用命令killall svnserve

利用 svn 钩子 hooks/post-commit 实现代码自动部署

svn 服务器和 web 服务器是同一台机器
svn checkout 文件到 web 服务器部署目录

在这之前,已经在svn仓库里上传了 hec 项目。web 项目部署目录:/home/weblogic/user_projects/domains/uat_domain/HECUAT

cd /home/weblogic/user_projects/domains/uat_domain/HECUAT
svn co svn://127.0.0.1/hec

会提示输入账户和密码,并询问是否保存密码。选择保存密码。

配置 post-commit 文件

创建post-commit,修改权限。

cd /home/svn/repository/hooks
cp post-commit.tmpl post-commit
chmod +x post-commit

vim post-commit,编辑之后,切换到命令模式,输入wq保存后退出。

#!/bin/bash
REPOS="$1"
REV="$2"
LOGFILE=/home/weblogic/svn/logs/svn.log
exec 1>>"$LOGFILE"
exec 2>&1
export  LC_CTYPE="zh_CN.GBK"
export  LC_ALL=
SVNLOOK=svnlook
TIME=$(date "+%Y-%m-%d %H:%M:%S")
AUTHOR=$($SVNLOOK author -r $REV "$REPOS")
CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS)
MESSAGE=$($SVNLOOK log -r $REV "$REPOS")

function myecho() {
    echo "$TIME" "$*"
}

myecho "**************************************************************"
myecho "提交版本:$REV 作者:$AUTHOR"
myecho "提交备注:$MESSAGE"
myecho "修改目录:$(echo $CHANGEDDIRS | tr '\n' ' ')"

MASTERDIR=$(echo "$CHANGEDDIRS" | head -1)

PROJECT=$(echo $MASTERDIR | awk -F / '{print $1}')

if [ "$PROJECT" == "uathec_online" ];then
    myecho "项目:$PROJECT 同步目录:$MASTERDIR"
    svn up /home/weblogic/user_projects/domains/uat_domain/HECUAT/hec/
fi

切换为 web 服务器的用户,执行 sh post-commit,如果没有提示错误,即为 OK,如果提示错误,重新执行sh -x post-commit,可看到详细报错(一般报错都是账户密码问题,或者文件格式问题)。 注:

  • 如果在上一步没有选择保存密码,需要修改 post-commit 里的svn up /home/weblogic/user_projects/domains/uat_domain/HECUAT/hec/为svn up /home/weblogic/user_projects/domains/uat_domain/HECUAT/hec/ --username svn账户 --password svn密码
  • windows 下编辑的文件,放在 linux 下运行,文件格式有问题,需要转换,用 vim 打开 post-commit,输入 :set fileformat=unix 并回车,然后保存退出。

测试自动更新

提交一次代码,如果没有提示 post-commit 相关的错误,即为成功。